NSI (première) · Chapitre 2 · Exercice de TD
Expliquer pourquoi 0.1 + 0.1 + 0.1 == 0.3 est faux alors que 0.1 + 0.1…
Flottants, booléens et textes · Écriture binaire et pièges des flottants · niveau 2
Énoncé
Expliquer pourquoi 0.1 + 0.1 + 0.1 == 0.3 est faux alors que 0.1 + 0.1 == 0.2 est vrai.
Corrigé
Les deux membres de chaque test sont des flottants, c'est-à-dire des approximations. Tout se joue sur la question : les deux approximations tombent-elles sur le même flottant ?
Le cas qui marche. est une multiplication par déguisée : elle ne fait qu'augmenter l'exposant d'une unité, sans toucher à la mantisse — donc sans aucun arrondi. Le résultat est exactement le double du flottant retenu pour , et c'est aussi exactement le flottant retenu pour (même mantisse, exposant décalé). L'égalité est vraie, et elle l'est pour une raison structurelle, pas par chance.
Le cas qui échoue. La troisième addition, elle, arrondit : le résultat exact de n'est pas représentable, la machine prend le flottant le plus proche, et il se trouve qu'il est au-dessus de tandis que le flottant retenu pour est en dessous. Les deux valeurs diffèrent d'un cran.
>>> from decimal import Decimal
>>> Decimal(0.1 + 0.1 + 0.1)
Decimal('0.3000000000000000444089209850062616169452667236328125')
>>> Decimal(0.3)
Decimal('0.299999999999999988897769753748434595763683319091796875')
Piège : conclure de 0.1 + 0.1 == 0.2 que « parfois ça marche, donc on peut tester l'égalité ». Non : cela signifie que le test d'égalité est imprévisible sans une analyse fine des arrondis — c'est précisément pour cela qu'on l'interdit.
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
- 16 autres exercices corrigés dans ce chapitre, et 20 à chercher avec le tuteur
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
Sans compte : le cours, 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.