Java vs C 浮点:“x * x”与“pow(x,2)”不同?
2022-09-02 21:15:58
为什么会这样?与C甚至Java Math.pow方法相比,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中看到的结果。呸。