为什么会这样呢?与C以及Java的Math.pow方法相比,在乘以两个浮点数时,Java似乎会产生一个小差异的结果。
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
更新:根据Ed S.的评论,我还发现C的行为会随着编译器而改变。使用gcc似乎与Java的行为相匹配。使用Visual Studio(取决于目标平台),它可以产生上述结果或与Java中看到的结果相同。糟糕。
pow
函数,即float pow(float base, float exponent)
吧? - AusCBlokemovss
代替fld
指令,然后你就会得到Java的行为。编程的乐趣所在。 - Ed S.