Bases de la programmation (trace de pseudo-code)
Les valeurs réelles sont représentées en double précision IEEE 754 (binary64), et chaque somme est arrondie à la valeur représentable la plus proche. Quelle est la valeur de c après l'exécution du programme suivant ?
real: x ← 0.0
integer: c ← 0
while (x < 1.0)
x ← x + 0.1
c ← c + 1
endwhile
- A9
- B10
- C11
Afficher la réponse et l'explication
Réponse : C. 11
0,1 est un nombre à développement périodique en binaire, et il est stocké en double précision sous la forme d'une valeur approchée légèrement supérieure à 0,1. Chaque addition ajoute une erreur d'arrondi, et le résultat de 10 additions n'est pas 1,0 mais 0,9999999999999999. Cette valeur est inférieure à 1,0 et satisfait la condition de la boucle : une 11e addition a donc lieu, x vaut environ 1,1 et la boucle se termine, avec c = 11. On compte les itérations d'une boucle avec une variable entière, et on évite de comparer des réels avec = ou ≠. Si la condition testait avec ≠ la différence avec 1,0, x ne vaudrait jamais exactement 1,0 et la boucle ne se terminerait jamais.
Continuer : 9 autres questions sur Bases de la programmation (trace de pseudo-code)