Adloun

Une boucle qui ne s'arrête pas, sur des flottants

Exercice supplémentaire · niveau 3 (difficile) · sciences numériques et technologie (seconde), chapitre 4 — Les boucles · La boucle non bornée : while

Énoncé

Expliquer pourquoi la première boucle ne se termine pas alors que la seconde, mathématiquement identique, se termine.

# (a)
x = 0.0
while x != 1.0:
    x = x + 0.1

# (b)
x = 0.0
while x < 1.0:
    x = x + 0.1

Corrigé

(a) ne se termine jamais. En ajoutant dix fois le flottant , on n'obtient pas exactement mais . La variable saute par-dessus la valeur cible sans jamais l'égaler, et le test != reste vrai indéfiniment.

(b) se termine, après onze tours et non dix : au dixième, x vaut un peu moins que , la condition est encore vraie, et l'on ajoute un de plus. La variable finit à environ .

Deux règles à retenir, déjà rencontrées séparément : ne jamais tester l'égalité de flottants, et se méfier des comptages de tours quand la condition porte sur des flottants. Quand on connaît le nombre de répétitions, une boucle for sur des entiers est toujours préférable :

for k in range(10):
    x = k / 10

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