À retenir
- Il indique un résultat mathématique indéfini.
- Il ne bloque pas l'exécution du programme.
- Il se propage à travers tous les calculs suivants.
- C'est le comportement par défaut de la norme IEEE 754 (standard de calcul flottant).
Un NaN silencieux (pour Not a Number) est une valeur spéciale utilisée par les processeurs pour représenter un résultat de calcul mathématiquement impossible, comme diviser zéro par zéro. Contrairement à d'autres erreurs qui stoppent net un programme, le NaN silencieux permet au calcul de continuer discrètement sans provoquer d'alerte immédiate ou de plantage.
Étymologie
Vient de l'anglais Quiet NaN (ou qNaN). NaN est l'acronyme de Not a Number (pas un nombre). Le terme « silencieux » souligne que cette erreur ne déclenche pas d'exception matérielle (interruption) lors de sa création ou de sa manipulation.
Exemples d'usage
- Effectuer la division
0 / 0dans de nombreux langages de programmation. - Calculer la racine carrée d'un nombre négatif (
sqrt(-1)) sans utiliser de nombres complexes. - Additionner l'infini positif avec l'infini négatif.
Cas d'usage
On l'utilise principalement dans le calcul scientifique et le traitement de données massives. Il permet de traiter de longs tableaux de chiffres sans que tout le processus ne s'arrête si une seule donnée est corrompue ou invalide.
Bonnes pratiques
Il faut toujours vérifier la présence de NaNs à la fin d'une chaîne de calculs complexe, car ils se propagent : n'importe quelle opération avec un NaN silencieux donnera un NaN en résultat. Utilisez des fonctions dédiées comme isNaN() pour les détecter.
Synonymes
Antonymes
Conseil
Si vous développez des applications critiques, ne vous fiez pas au silence du NaN. Prévoyez des tests de validation de vos données d'entrée pour éviter qu'une valeur 'fantôme' ne fausse l'intégralité de vos résultats finaux.
Questions fréquentes
Quelle est la différence avec un NaN signalant ?
Le NaN signalant provoque une erreur immédiate (interruption) dès qu'il est utilisé, tandis que le silencieux 'coule' dans le programme sans faire de bruit.
Est-ce que NaN est égal à NaN ?
Non, une particularité informatique majeure est que NaN n'est jamais égal à lui-même (NaN != NaN).