a forma más rápida de voltear el signo de un doble / flotante en C

Cuál es la forma más rápida de voltear el signo de un doble (o flotante) en C?

ensé que acceder al bit de signo directamente sería la forma más rápida y encontré lo siguiente:

double a = 5.0;
*(__int64*)&a |= 0x8000000000000000;
// a = -5.0

float b = 3.0;
*(int*)&b |= 0x80000000;
// b = -3.0

Sin embargo, lo anterior no funciona para números negativos:

double a = -5.0;
*(__int64*)&a |= 0x8000000000000000;
// a = -5.0

Respuestas a la pregunta(4)

Su respuesta a la pregunta