gpt4 book ai didi

c++ - 为什么在特定的 Visual Studio 2008 项目中错误地添加了 double ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:21 27 4
gpt4 key购买 nike

在尝试将 Java 代码移植到 C++ 时,我偶然发现了一些奇怪的行为。我无法进行双重加法运算(即使在 Visual Studio 2008 中设置了编译器选项/fp:strict,这意味着“正确的” float 学运算)。

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:严格。

有什么想法吗?它真的截断为 float 吗?这个项目确实需要在 Java 和 C++ 端有相同的行为。我通过从 VC++ 中的调试窗口读取所有值。

解决方案: _fpreset();//Barry Kelly 的想法解决了它。图书馆将 FP 精度设置为低。

最佳答案

我唯一能想到的是,也许您正在链接一个库或 DLL,它通过控制字修改了 CPU 精度。

在有问题的计算之前,您是否尝试过从 float.h 调用 _fpreset()

关于c++ - 为什么在特定的 Visual Studio 2008 项目中错误地添加了 double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1154221/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com