【发布时间】:2018-12-18 12:41:50
【问题描述】:
我编写了一个执行复杂计算(测量的最小二乘调整)的 C# 应用程序。我使用 Visual Studio 中的任何 CPU 配置构建了这个应用程序。一切都很好,直到我收到一封电子邮件,说明在一个特定情况下,两台不同的 PC 上的结果不同。经过一些调试,我发现与 64 位操作系统相比,32 位操作系统上的应用程序的结果略有错误(小数点后第 12 位)。在那个特定的情况下,最终结果离我们很远,因为它表明错误的测量没有通过测试。
然后我构建了 2 个版本的应用程序,32 位和 64 位,两个版本都按预期工作并给出了相同的结果。
所以现在我想了解“引擎盖”下发生了什么,任何 CPU 版本执行浮点计算的方式可能与 32 位和 64 位构建不同吗?优化代码选项一直关闭。
【问题讨论】:
-
什么CPU?我记得很久以前有特定的 CPU 在浮点方面存在问题,不知何故,模糊不清。
-
如果你说的是
float和double,那么你需要做好准备,同样的操作可能会产生稍微不同的结果。 -
我认为在这种特定情况下它并不重要。我在 i7-4770 上安装了 32 位和 64 位 Windows 7,但仍然存在错误。
-
请参阅floating-point-gui.de“每个程序员都应该知道的浮点运算知识”。
-
我知道,但这是非常具体的,它看起来像一个错误,所以核心开发人员真的应该去。这与其说是“我有一个程序”,不如说是“我认为我有一个错误”。
标签: c# build precision floating-accuracy