Hors programme. Les flottants comptent trois valeurs qui ne sont pas…
Exercice supplémentaire · niveau 2 · NSI (première), chapitre 2 — Flottants, booléens et textes · Sous le capot des flottants
Énoncé
Hors programme. Les flottants comptent trois valeurs qui ne sont pas des nombres : , et nan. Vérifier que float("nan") != float("nan"), et expliquer pourquoi cela n'est pas un bug mais une décision de la norme.
Corrigé
>>> import math
>>> x = float("nan")
>>> x == x
False
>>> x != x
True
>>> math.isnan(x)
True
>>> 1e308 * 10
inf
>>> math.inf - math.inf
nan
: le débordement ne plante pas. Quand un calcul dépasse le plus grand flottant (), le résultat n'est pas une erreur : c'est inf, une valeur avec laquelle on peut continuer à calculer. Contraste frappant avec les entiers du chapitre 1, où le débordement produisait un résultat faux sans le dire.
nan : « not a number ». Il naît des opérations sans réponse : , , . La norme décide qu'il n'est égal à rien, pas même à lui-même — et c'est cohérent : « une quantité indéterminée » et « une autre quantité indéterminée » n'ont aucune raison de coïncider. La conséquence pratique est célèbre : x != x est le test historique de détection d'un nan, avant que math.isnan n'existe.
Piège : nan contamine tout. Une seule valeur manquante mal traitée dans un tableau de mesures, et la moyenne entière devient nan. C'est d'ailleurs le but : mieux vaut un résultat manifestement invalide qu'un résultat plausible et faux.
Contrôle : [x].count(x) rend pourtant — les listes Python comparent d'abord par identité, avant d'utiliser l'égalité. Deux règles différentes pour la même valeur : une raison de plus de passer par math.isnan.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.