A maneira mais rápida de virar o sinal de um double / float em C
Qual é a maneira mais rápida de virar o sinal de um double (ou float) em C?
Eu pensei que acessar o bit do sinal diretamente seria a maneira mais rápida e encontrei o seguinte:
double a = 5.0;
*(__int64*)&a |= 0x8000000000000000;
// a = -5.0
float b = 3.0;
*(int*)&b |= 0x80000000;
// b = -3.0
No entanto, o acima não funciona para números negativos:
double a = -5.0;
*(__int64*)&a |= 0x8000000000000000;
// a = -5.0