編譯器
在嚴格的設定下,編譯器不會擅自將浮點數的加法 (a + b) + c 重新排列為 a + (b + c),其理由下列何者正確?
- A因為捨入誤差使結合律不成立,結果可能會改變
- B因為重新排列會使加法的次數增加
- C因為浮點數的加法,其順序是由硬體自動決定的
查看答案與解析
正確答案:A. 因為捨入誤差使結合律不成立,結果可能會改變
在浮點數的計算中,每次加法的結果都會被捨入到可表示的位數,所以改變計算順序,結果可能會稍有不同。例如先把非常大的數與很小的數相加,小的數會因捨入而消失,但若先把小的數互相相加,則可能保留下來。因此嚴格設定的編譯器會維持順序。若選擇容許結果有差異的設定(如快速數學設定等),為了向量化也可能重新排列。加法的次數不會改變。
- A. 正確。因捨入使結合律不成立,結果可能改變。
- B. 即使重新排列,加法的次數也相同。
- C. 計算順序是由指令序列決定的,並非由硬體決定。