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
  1. A9
  2. B10
  3. 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.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases de la programmation (trace de pseudo-code)

  1. La classe Counter donne à chaque instance sa propre variable membre entière count (0 à la création), et sa méthode inc() ajoute 1 à son propre count. Quelle est la valeur de x après l'exécution du programme suivant ?
  2. La classe Counter donne à chaque instance sa propre variable membre entière count (0 à la création), et sa méthode inc() ajoute 1 à son propre count. Une variable de type Counter contient une référence à une instance, et non l'instance elle-même. Quelle est la valeur de x après l'exécution du programme suivant ?
  3. Les deux affectations du programme suivant devaient échanger les valeurs de x et y. Quelles sont les valeurs de x et y après son exécution ?
  4. Le programme suivant fait circuler des valeurs entre trois variables. Quelles sont les valeurs de a, b et c après son exécution ?
  5. Le programme suivant multiplie x par 3 de façon répétée. Quelle est la valeur de n après son exécution ?