NaN

Un article de Wikipedia, l'encyclopedie libre.

NaN ( ≪  Not a Number  ≫ , en francais ≪ Pas un Nombre ≫ ou ≪ Non Numerique ≫) est, en informatique , une valeur ou un symbole produit par le resultat d'une operation arithmetique invalide, quand les nombres sont representes en virgule flottante , suivant le standard IEEE 754 .

Proprietes [ modifier | modifier le code ]

Obtenir NaN comme resultat [ modifier | modifier le code ]

On obtient NaN pour certaines operations qui sont des indeterminees mathematiques : 0/0, ∞ ? ∞, ∞/∞, 0·∞, et dans certaines bibliotheques , 1 . A noter que toutes les formes indeterminees ne donnent pas NaN : 1/0 n'a pas de sens en mathematiques pures, mais, en IEEE 754 , par convention, on obtient +∞.

C'est egalement le resultat obtenu en langage C entre autres quand on tente de calculer la racine carree d'un nombre strictement negatif [ 1 ] (ce qui est impossible car dans ce format de representation des nombres, un nombre complexe ne peut etre represente).

Operations avec NaN [ modifier | modifier le code ]

NaN est en quelque sorte un element absorbant . N'importe quoi additionne, multiplie, ou toute fonction mathematique appliquee a NaN donne NaN. Meme NaN + ∞ donne NaN, alors que pour tout nombre x , (donc, pas NaN ni ?∞), x + ∞ donne +∞. L’operation NaN ? NaN donne NaN, et non zero.

Comparaisons [ modifier | modifier le code ]

NaN est une valeur qui a des proprietes uniques par rapport a tous les nombres. En particulier, toute comparaison ≪ egal ≫, ≪ superieur ≫, ≪ inferieur ≫, ≪ superieur ou egal ≫, ≪ inferieur ou egal ≫ impliquant NaN donne la reponse booleenne ≪ faux ≫, alors que toute comparaison ≪ different ≫ donne le resultat ≪ vrai ≫.

Cela conduit meme a ce que la comparaison ≪ NaN==NaN ≫ (≪ == ≫ signifie ≪ est-ce que ces valeurs sont egales ? ≫) donne la reponse ≪ faux ≫. C'est la seule valeur ayant cette propriete (meme l'infini, selon la norme IEEE 754 , donne ≪ vrai ≫ pour la requete ≪ Inf==Inf ≫).

NaN est egalement la seule valeur de x pour laquelle on ait la reponse ≪ faux ≫ a la question ≪ x<=Inf ≫ (≪ x est-il inferieur ou egal a l'infini ? ≫). x ou y egal a NaN permet aussi d'avoir la meme reponse aux requetes x<y (≪ x est-il inferieur a y ? ≫) et x>=y (≪ x est-il superieur ou egal a y ? ≫).

De ce qui precede, on deduit que si l'on veut verifier si x vaut NaN, faire ≪ x==NaN ≫ serait une erreur. Il faut plutot faire ≪ x~=x≫, soit ≪ x est-il different de lui-meme ? ≫, qui repondra ≪ vrai ≫ si x vaut NaN.

Cela peut etre un moyen efficace de poser au programme la question ≪ est-ce que x est NaN ? ≫ dans un langage qui ne dispose pas d'une fonction specialisee pour cela [ 2 ] .

Ces proprietes, en particulier le fait que deux NaN ne se valent pas, paraissent assez choquantes si on traite NaN comme un nombre. Elles se comprennent mieux quand on admet que NaN signifie que la valeur ne peut etre connue.

Voir aussi [ modifier | modifier le code ]

References [ modifier | modifier le code ]