Signo de verificación de valor NaN

Mi progtwig durante el cálculo puede generar valores nan o -nan . -nan si los valores son nan / -nan usando el método isnan .

También tengo que distinguir si el valor de nan es positivo o negativo ( nan o -nan ). ¿Cómo puedo hacer esto?

Agregado: necesito una solución multiplataforma para WIN y para Unix / Linux

Intente signbit desde :

Descripción

signbit () es una macro genérica que puede funcionar en todos los tipos reales de punto flotante. Devuelve un valor distinto de cero si el valor de x tiene establecido su bit de signo.

NaNs e infinitos tienen un bit de signo.

Aparentemente es parte de C99 y POSIX.1-2001, pero usted podría escribir una macro / función usted mismo si no quiere usar / conformarse con ninguno de los dos.

Casi todos los sistemas actuales utilizan punto flotante IEEE de precisión simple o doble. Entonces, en ese caso, podría (a nivel de bit) convertirlo en un entero y leer el bit de signo.

Aquí hay un enfoque que utiliza los sindicatos. Aunque no es totalmente compatible con las normas, debería funcionar en casi todos los sistemas.

 union{ double f; uint64_t i; } x; xf = ... // Your floating-point value (can be NaN) // Check the sign bit. if ((xi & 0x8000000000000000ull) == 0){ // positive }else{ // negative } 

Podría usar la función copysign (C99, en );

 double sign = copysign(1.0, your_nan); 

De C99 §7.12.11.1:

Descripción

Las funciones copysign producen un valor con la magnitud de x y el signo de y. Producen un NaN (con el signo de y) si x es un NaN. En las implementaciones que representan un cero con signo pero no tratan el cero negativo de manera consistente en operaciones aritméticas, las funciones de copysign consideran el signo de cero como positivo.

Devoluciones

Las funciones copysign devuelven un valor con la magnitud de x y el signo de y.