NaN
NaN (« Not a Number », en français « Pas un Nombre » ou « Non Numérique ») est, en informatique, une valeur ou un symbole produit par le résultat d'une opération arithmétique invalide, quand les nombres sont représentés en virgule flottante, suivant le standard IEEE 754.
Propriétés
Obtenir NaN comme résultat
On obtient NaN pour certaines opérations qui sont des indéterminées mathématiques : 0/0, ∞ – ∞, ∞/∞, 0·∞, et dans certaines bibliothèques, 1∞. À noter que toutes les formes indéterminées ne donnent pas NaN : 1/0 n'a pas de sens en mathématiques pures, mais, en IEEE 754, par convention, on obtient +∞.
C'est également le résultat obtenu en langage C entre autres quand on tente de calculer la racine carrée d'un nombre strictement négatif[1] (ce qui est impossible car dans ce format de représentation des nombres, un nombre complexe ne peut être représenté).
Opérations avec NaN
NaN est en quelque sorte un élément absorbant. N'importe quoi additionné, multiplié, ou toute fonction mathématique appliquée à NaN donne NaN. Même NaN + ∞ donne NaN, alors que pour tout nombre x, (donc, pas NaN ni –∞), x + ∞ donne +∞. L’opération NaN – NaN donne NaN, et non zéro.
Comparaisons
NaN est une valeur qui a des propriétés uniques par rapport à tous les nombres. En particulier, toute comparaison « égal », « supérieur », « inférieur », « supérieur ou égal », « inférieur ou égal » impliquant NaN donne la réponse booléenne « faux », alors que toute comparaison « différent » donne le résultat « vrai ».
Cela conduit même à ce que la comparaison « NaN==NaN » (« == » signifie « est-ce que ces valeurs sont égales ? ») donne la réponse « faux ». C'est la seule valeur ayant cette propriété (même l'infini, selon la norme IEEE 754, donne « vrai » pour la requête « Inf==Inf »).
NaN est également la seule valeur de x pour laquelle on ait la réponse « faux » à la question « x<=Inf » (« x est-il inférieur ou égal à l'infini ? »). x ou y égal à NaN permet aussi d'avoir la même réponse aux requêtes x<y (« x est-il inférieur à y ? ») et x>=y (« x est-il supérieur ou égal à y ? »).
De ce qui précède, on déduit que si l'on veut vérifier si x vaut NaN, faire « x==NaN » serait une erreur. Il faut plutôt faire « x~=x», soit « x est-il différent de lui-même ? », qui répondra « vrai » si x vaut NaN.
Cela peut être 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 spécialisée pour cela[2].
Ces propriétés, 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 être connue.
Voir aussi
Références
- ↑ (en) Michael Ashley, « PHYS2020 - Computational Physics, based on the C programming language », 2004.
- ↑ (en) Seth Popinchalk, « How do I test for NaN in my model? », 4 février 2009.
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.