Adloun

informatique (tronc commun des prépas scientifiques) · Chapitre 1 · Exercice de TD

Le flottant qui trahit le test

La discipline de programmation · niveau 3 (difficile)

Énoncé

Pourquoi le test assert moyenne([0.1, 0.2]) == 0.15 échoue-t-il sur une implémentation correcte ? Comment y remédier ?

Corrigé

Les nombres flottants sont représentés en machine à l'aide d'une mantisse binaire finie. Les fractions et n'admettent pas de représentation binaire exacte. En effectuant le calcul, la machine obtient : moyenne([0.1, 0.2]) = 0.15000000000000002 L'égalité stricte == échoue à cause de ces erreurs d'arrondi infinitésimales. Pour tester l'égalité de deux nombres flottants issus de calculs, il faut toujours utiliser une comparaison à tolérance (ou à près) :

assert abs(moyenne([0.1, 0.2]) - 0.15) < 1e-12

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre