Adloun

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.1

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →