Le flottant qui trahit le test
Exercice · informatique (tronc commun des prépas scientifiques), chapitre 1 — La discipline de programmation
É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-12Les 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.