为什么在特定的 Visual Studio 2008 项目中错误地添加了双精度数?

2023-12-06

尝试将 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(使用前将#替换为@)

为什么在特定的 Visual Studio 2008 项目中错误地添加了双精度数? 的相关文章

随机推荐