我在visual studio 2013(.NET framework 4.0)上的c#中遇到了一个奇怪的问题:
当我从主线程编译运行以下代码时:
//==========
double ddd = 300000.0;
ddd *= ddd;
Console.Write("The result is: " + ddd);
//==========
Run Code Online (Sandbox Code Playgroud)
我得到的结果是:"结果是:89999998976"
当我从同一个可执行文件中的不同线程运行相同的代码时,我得到:
"结果是:90000000000"
看起来主线程中的double被视为float(32位精度而不是64位精度).
有谁知道为什么会这样?
编辑:
我找到了答案.我正在使用Managed DirectX.显然,你需要指定directX设备创建不要弄乱FPU精度(CreateFlags.FpuPreserve),否则双精度将被视为浮点数.
有关更多信息: 浮点精度