@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

Ответы на вопрос(4)

Ваш ответ на вопрос