繁体   English   中英

为什么在32位和64位OS上为任何CPU生成Visual Studio都会产生不同的浮点结果?

[英]Why does Visual Studio build for Any CPU gives different floating point results on 32bit and 64bit OS?

我编写了一个C#应用程序,该应用程序执行复杂的计算(测量值的最小二乘平差)。 我使用Visual Studio中的任何CPU配置构建了此应用程序。 一切运行良好,直到我收到一封电子邮件,指出在一种特定情况下,两台不同的PC上的结果有所不同。 经过一些调试后,我发现与64位操作系统相比,在32位OS上运行的应用的结果略有错误(小数点后12位)。 在那种特定情况下,最终结果差强人意,因为它表明错误的测量没有通过测试。

然后,我构建了该应用程序的2个版本(32位和64位),这两个版本均按预期工作,并给出了相同的结果。

因此,现在我想了解“引擎盖”下发生的情况,任何CPU版本如何执行与32位和64位版本不同的浮点计算? 优化代码选项一直处于关闭状态。

我的第一个帖子在这里。 我认为我必须向所有对此事感兴趣的人展示一些与zoran发布的内容完全相关的东西。

简单地,写下以下代码:

float a = -0.003124237f;
float b =  0.009375687f;
float c = 88.4625f;
float abc = a + b + c;
float cab = c + a + b;

然后进行2个测试,使用x86和x64构建。在这两个测试中,请注意“ abc”和“ cab”是否看到了什么? 好吧,我愿意。 必须将其命名为“ bug”。 这不是程序错误,而是我猜想它深深地属于CPU的错误。 真正了解的人可以帮助我们进一步了解此问题。 在此先感谢,并感谢zoran在这里发布了类似的文章。

(对于那些忙于测试我的“代码”的人,这里是我的结果:

x86:abc = cab = 88.46875

x64:abc = 88.46875,但是..... cab = 88.46876

换句话说,x64不能像x86生成器那样精确地计算。 “精确”一词非常“柔和”和“柔和”。 我庄严地称这个“真正的错误”,这只是一个无法接受的问题。 确实。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM