我想這是一個相當基本的問題,但我不知道爲什麼這兩個代碼給出不同的結果。 Pentium是否處理變量Divider與中間值(256.0 /(double)k)不同?這兩個簡單的代碼爲什麼會給出不同的結果?
int j=64, k=20;
double x, y, Divider;
Divider = 256.0/(double)k;
x = (double)j/Divider - 5.0;
y = (double)j/(256.0/(double)k) - 5.0;
結果: X = -2.77555756156289E-16 Y = 0.0
作爲參考,我使用Embarcadero公司XE3 C++生成器,其給出作爲生成器相同的結果6.我使用的默認編譯器設置。
一些編譯器保證他們總是將x和y的計算編譯爲等效的指令。有些編譯器保證它們不會生成相同的指令,因爲將'double'類型的中間計算分配給'double'左值具有影響。有些編譯器甚至不知道有什麼區別。如果沒有關於編譯器的信息,很難說更多,但查找'FLT_EVAL_METHOD'(在C99中引入)以獲取更多信息。 –