double被视为c#

时间:2017-04-06 13:00:53

标签: c# precision floating-accuracy

我在visual studio 2013(.NET framework 4.0)上的c#中遇到了一个奇怪的问题:

当我从主线程编译运行以下代码时:

//==========
double ddd = 300000.0;
ddd *= ddd;

Console.Write("The result is: " + ddd);
//==========

我得到的结果是: "结果是:89999998976"

当我从同一个可执行文件中的不同线程运行相同的代码时,我得到:

"结果是:90000000000"

看起来主线程中的double被视为float(32位精度而不是64位精度)。

有没有人知道为什么会这样?

编辑:

我找到了答案。 我使用的是Managed DirectX。 显然,你需要指定directX设备创建不要乱用FPU精度(CreateFlags.FpuPreserve),否则双打将被视为浮动。

欲了解更多信息: floating point precision

0 个答案:

没有答案