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

questionAnswers(4)

yourAnswerToTheQuestion