我在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