Adloun

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

Faire l'exercice suivant avec le tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →