2012-07-05 23 views
6

Estoy un poco sorprendido (y asustado) por el hecho de que el pragma warnings no se queja de que 'NaN' y 'nan' no sean numéricos.¿Por qué es 'NaN' numérico según las advertencias pragma?

¿Por qué warnings no emite el 'Argument isn't numeric in addition (+) habitual para ellos?

caso de prueba

$ perl -Mstrict -wE 'say 0+$_ for qw/string NaN nan fail/;' 
Argument "string" isn't numeric in addition (+) at -e line 1. 
0 
0 
0 
Argument "fail" isn't numeric in addition (+) at -e line 1. 
0 
+3

http://en.wikipedia.org/wiki/NaN 'NaN' es un valor válido de un número de punto flotante, al igual que +/- infinito. – biziclop

Respuesta

10

De perlop

binario "< =>" devuelve -1, 0 o 1 dependiendo de si el argumento izquierdo es numéricamente menor que, igual a, o mayor que el derecho argumento. Si su plataforma admite NaN (no números) como valores numéricos , utilizándolos con "< =>" devuelve undef. NaN no es "<", "==", ">", "< =" o "> =" cualquier cosa (incluso NaN), entonces esos 5 devuelven falso. NaN! = NaN devuelve verdadero, al igual que NaN! = Cualquier otra cosa.

Si la plataforma no es compatible con NaN NaN entonces es sólo una cadena con valor numérico 0.

NaN se comporta diferente en diferentes plataformas. Es en cierto modo numérico ya que puede actuar como tal en operaciones numéricas. Pero tampoco es realmente un número ya que tiene un valor indefinido.

Además, su comportamiento no es portátil como:

perl -E "say 'yes' if 0 == 'NaN'" 

podría dar resultados diferentes en diferentes plataformas a menos que use Perl 5.22 o más reciente.

+0

Entonces 'NaN' no es un número solo de nombre? Detrás de escena, ¿tiene realmente una representación numérica? – Zaid

+0

Ver la respuesta actualizada. –

+3

@Zaid, NaN no es un número en una definición normal, pero es un flotante IEEE válido. – ikegami

-4

NaN es la contraparte numérica de NiL en las cadenas.

7

"No es un número" es el nombre largo del valor que con más frecuencia se representa como "NaN". Vea también the wikipedia article. La informática con NaN es realmente significativa (incluso tiene una representación de nivel de bits real en IEEE754).

Cuestiones relacionadas