爲什麼這是真的? Java似乎產生了一個小的差異,當乘以兩個浮點數與C相比,甚至是Java Math.pow方法的結果。Java與C浮點:「x * x」與「pow(x,2)」不同?
的Java:
float a = 0.88276923;
double b = a * a; // b becomes 0.779281497001648 <---- what???
b = Math.pow(a,2); // b becomes 0.7792815081874238
C:
float a = 0.88276923;
double b = a * a; // b becomes 0.7792815081874238
pow(a,2); // b becomes 0.7792815081874238
更新:每埃德S.的評論,我還發現了C的行爲取決於編譯器的變化。使用gcc它看起來與Java行爲相匹配。使用visual studio(取決於你的目標平臺),它可以產生上面看到的結果或Java中看到的結果。啊。
http://floating-point-gui.de/ – 2012-04-17 23:37:32
啊,浮點運算。純粹的準確性和可靠性的堡壘。 – Perception 2012-04-17 23:38:43
我知道漂浮不精確。然而,我期望他們的不精確性是一致的。 – mark 2012-04-17 23:40:13