尝试将 java 代码移植到 C++ 时我偶然发现了一些奇怪的行为。我无法进行双重加法(即使编译器选项 /fp:strict 意味着在 Visual Studio 2008 中设置了“正确的”浮点数学)。
double a = 0.4;
/* a: 0.40000000000000002, correct */
double b = 0.0 + 0.4;
/* b: 0.40000000596046448, incorrect
(0 + 0.4 is the same). It's not even close to correct. */
double c = 0;
float f = 0.4f;
c += f;
/* c: 0.40000000596046448 too */
在另一个测试项目中,我设置它工作正常(/fp:strict 的行为符合 IEEE754)。
使用 Visual Studio 2008(标准),无优化且 FP:严格。
有任何想法吗?它真的截断为浮点数吗?这个项目确实需要 Java 和 C++ 端相同的行为。我通过从 VC++ 的调试窗口读取所有值。
解决方案:_fpreset(); // 巴里·凯利的想法解决了这个问题。某个库将 FP 精度设置为低。
我唯一能想到的是,也许您正在链接一个库或 DLL,它通过控制字修改了 CPU 精度。
你试过打电话吗_fpreset()
from float.h
在有问题的计算之前?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)