Python (école d'ingénieur) · Chapitre 3 · Exercice
Comparaison de flottants et pièges
Représentation des nombres en machine
Énoncé
Expliquer pourquoi le code suivant ne s'arrête pas, et corriger-le.
x = 0.0
while x != 1.0:
x += 0.1
print(x)
Proposer trois méthodes différentes pour corriger ce problème.
Corrigé
Le nombre n'est pas représentable exactement sous forme dyadique (binaire). Lors de l'addition répétée de , les erreurs d'arrondi s'accumulent. La variable x ne sera jamais rigoureusement égale à 1.0 (elle sautera par exemple de 0.9999999999999999 à 1.0999999999999999). Trois corrections possibles :
- Utiliser un seuil de tolérance (tol) :
x = 0.0
while abs(x - 1.0) > 1e-9:
x += 0.1
- Utiliser une inégalité :
x = 0.0
while x < 1.0 - 1e-9:
x += 0.1
- Utiliser le module
math.isclose:
import math
x = 0.0
while not math.isclose(x, 1.0):
x += 0.1100 % gratuit
La suite du chapitre est sur Adloun
- 7 autres exercices corrigés dans ce chapitre, et 7 à chercher avec le tuteur
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.