sciences numériques et technologie (seconde) · Chapitre 2 · Exercice de TD
Le piège des nombres flottants
Variables, types et affectations · Les types de données · niveau 2
É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.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 14 autres exercices corrigés dans ce chapitre, et 22 à chercher avec le tuteur
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.