@Lindydancer: Я тоже так думал. Однако я проверил это на GCC и компиляторе Intel и не смог найти разницу в производительности между a = -a, a * = - 1 и a * = - 1.0. Так что я думаю, что все они оптимизированы одинаковым образом компилятором.
самый быстрый способ перевернуть знак двойного (или плавать) в 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