Каков самый быстрый способ перевернуть знак двойного (или плавающего) в 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