編譯器

在嚴格的設定下,編譯器不會擅自將浮點數的加法 (a + b) + c 重新排列為 a + (b + c),其理由下列何者正確?

  1. A因為捨入誤差使結合律不成立,結果可能會改變
  2. B因為重新排列會使加法的次數增加
  3. C因為浮點數的加法,其順序是由硬體自動決定的
查看答案與解析

正確答案:A. 因為捨入誤差使結合律不成立,結果可能會改變

在浮點數的計算中,每次加法的結果都會被捨入到可表示的位數,所以改變計算順序,結果可能會稍有不同。例如先把非常大的數與很小的數相加,小的數會因捨入而消失,但若先把小的數互相相加,則可能保留下來。因此嚴格設定的編譯器會維持順序。若選擇容許結果有差異的設定(如快速數學設定等),為了向量化也可能重新排列。加法的次數不會改變。

  • A. 正確。因捨入使結合律不成立,結果可能改變。
  • B. 即使重新排列,加法的次數也相同。
  • C. 計算順序是由指令序列決定的,並非由硬體決定。
練習這個領域 前往領域頁面

編譯器的其他題目

  1. 編譯器的自動向量化所使用的指令種類,下列何者正確?
  2. 編譯器的最佳化必須遵守的基本條件,下列何者正確?
  3. 關於程式碼產生階段之一的指令選擇(instruction selection)的說明,下列何者正確?
  4. 關於交叉編譯器(cross compiler)的說明,下列何者正確?
  5. 以偵錯器檢視施加了最佳化而編譯的程式時,有時部分變數的值會顯示為「無法顯示」。主要原因為何?

這個領域的比較