程式設計基礎(虛擬碼追蹤)

實數型的值以 IEEE 754 雙精度(binary64)表示,加法的結果捨入為最接近的可表示值。執行下列程式後 c 的值為下列何者?

實數型: x ← 0.0
整數型: c ← 0
while (x < 1.0)
  x ← x + 0.1
  c ← c + 1
endwhile
  1. A9
  2. B10
  3. 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次。
練習這個領域 前往領域頁面

相關計算工具

程式設計基礎(虛擬碼追蹤)的其他題目

  1. 類別 Counter 的每個實例各有一個整數型成員變數 count(建立時為0),方法 inc() 會將自己的 count 加1。執行下列程式後 x 的值為下列何者?
  2. 類別 Counter 的每個實例各有一個整數型成員變數 count(建立時為0),方法 inc() 會將自己的 count 加1。Counter 型的變數中存放的不是實例本身,而是指向實例的參照。執行下列程式後 x 的值為下列何者?
  3. 下列程式原本打算用兩個指派敘述交換 x 與 y 的值。執行後 x 與 y 的值為下列何者?
  4. 下列程式將3個變數的值依序傳遞。執行後 a、b、c 的值為下列何者?
  5. 下列程式反覆將 x 乘以3。執行後 n 的值為下列何者?