Le piège des nombres flottants
Exercice de TD · niveau 2 · sciences numériques et technologie (seconde), chapitre 2 — Variables, types et affectations · Les types de données
Énoncé
Prédire ce qu'affiche ce programme, l'exécuter, puis expliquer l'écart.
x = 0.1 + 0.2
print(x)
print(x == 0.3)
print(round(x, 2) == 0.3)Corrigé
0.30000000000000004
False
True
On attend 0.3 et True, et on obtient autre chose.
Explication. Un float est stocké en mémoire en base , sur un nombre fini de chiffres. Or et n'ont pas d'écriture binaire finie — exactement comme n'a pas d'écriture décimale finie. L'ordinateur en garde donc une valeur approchée, et la somme de deux approximations est légèrement décalée.
Conséquence pratique : on ne teste jamais l'égalité de deux flottants avec ==. On compare après arrondi, comme à la troisième ligne, ou bien on vérifie que l'écart est plus petit qu'une tolérance choisie. Le problème ne se pose pas avec les entiers, qui sont stockés exactement.
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.