2010-08-09 24 views
20

¿Es posible verificar si un número es NaN o no?ver número NaN

+3

NIL (NULL en C-ESE) es un valor especial * * puntero. No existe tal cosa como NULL para los números. ¿Estás pensando en NaNs de coma flotante? – zwol

+0

Quise decir NaN, mi mal, se corrigió la Q. – MBZ

+0

Duplicado: http://stackoverflow.com/questions/570669/checking-if-a-double-or-float-is-nan-in-c – GManNickG

Respuesta

31

Sí, por el hecho de que un NaN no es igual a ningún otro número, incluido él mismo.

Eso tiene sentido cuando piensas en lo que significa NaN, el hecho de que hayas creado un valor que no está realmente en tu poder para representar con valores de coma flotante "normales".

Por lo tanto, si crea dos números donde no sabe cuáles son, difícilmente puede considerarlos iguales. Ellos pueden ser, pero, dada la posibilidad de que algo grande números que puede ser (de hecho infinita), las posibilidades de que dos son el mismo número son sumamente pequeñas :-)

Usted puede buscar una función (macro en realidad) como isnan (en math.h para C y cmath para C++) o simplemente utilizar la propiedad de que un valor NaN no es igual a sí mismo con algo como:

if (myFloat != myFloat) { ... } 

Si, por alguna extraña razón, su aplicación C no tiene isnan (debería, ya que el estándar lo exige), puede codificar el suyo, por lo que mething como:

int isnan_float (float f) { return (f != f); } 
+2

Y envuelva 'myFloat! = myFloat' en algún tipo de función' isnan' con un comentario, no sea que los futuros lectores que no lo conocen estén muy confundidos. – GManNickG

-1

está buscando null, pero eso solo es útil para los indicadores. un número no puede ser nulo por sí mismo, tiene un valor conocido que usted ingresó allí o datos aleatorios de lo que haya antes en la memoria.