Basis van programmeren (pseudocode traceren)
Reële waarden worden voorgesteld in IEEE 754 dubbele precisie (binary64), en elke som wordt afgerond naar de dichtstbijzijnde voorstelbare waarde. Wat is de waarde van c nadat het volgende programma is uitgevoerd?
real: x ← 0.0
integer: c ← 0
while (x < 1.0)
x ← x + 0.1
c ← c + 1
endwhile
- A9
- B10
- C11
Antwoord en toelichting tonen
Antwoord: C. 11
0,1 is binair een repeterende breuk en wordt in dubbele precisie opgeslagen als een benadering die iets groter is dan 0,1. Elke optelling voegt een afrondingsfout toe, en het resultaat van 10 keer optellen is niet 1,0 maar 0,9999999999999999. Die waarde is kleiner dan 1,0 en voldoet dus aan de lusvoorwaarde, zodat er een 11e optelling volgt; x wordt ongeveer 1,1 en de lus eindigt met c = 11. Tel lusdoorgangen met een variabele van het type integer en vergelijk reële getallen niet met = of ≠. Als de voorwaarde met ≠ op ongelijkheid aan 1,0 test, wordt x nooit precies 1,0 en eindigt de lus nooit.
Verder: nog 9 vragen over Basis van programmeren (pseudocode traceren)