Самый быстрый способ перевернуть знак двойного числа / числа с плавающей запятой в C

Каков самый быстрый способ перевернуть знак двойного (или плавающего) в C?

Я подумал, что доступ к знаковому биту напрямую будет самым быстрым способом и нашел следующее:

double a = 5.0;
*(__int64*)&a |= 0x8000000000000000;
// a = -5.0

float b = 3.0;
*(int*)&b |= 0x80000000;
// b = -3.0

Однако вышеуказанное не работает для отрицательных чисел:

double a = -5.0;
*(__int64*)&a |= 0x8000000000000000;
// a = -5.0
10
задан mskfisher 11 May 2012 в 14:43
поделиться