程式設計基礎(虛擬碼追蹤)
實數型的值以 IEEE 754 雙精度(binary64)表示,加法的結果捨入為最接近的可表示值。執行下列程式後 c 的值為下列何者?
實數型: x ← 0.0
整數型: c ← 0
while (x < 1.0)
x ← x + 0.1
c ← c + 1
endwhile
- A9
- B10
- C11
查看答案與解析
正確答案:C. 11
0.1 在二進位中是循環小數,在雙精度中以比0.1稍大的近似值表示。把它一再相加,每次加法都會產生捨入誤差,加10次的結果不是1.0而是0.9999999999999999。這個值滿足 x < 1.0,因此會進行第11次加法,x 變為約1.1後離開迴圈,c = 11。實數迴圈的次數應以整數變數計算,並避免以 = 或 ≠ 比較實數。若把條件寫成 x ≠ 1.0,x 不會恰好等於1.0,迴圈就不會結束。
- A. 加9次0.1的值約為0.9,仍小於1.0。
- B. 若沒有誤差,加10次後 x = 1.0,但實際上第10次的結果稍小於1.0。
- C. 正確。加10次的結果為0.9999999999999999,小於1.0,因此執行11次。