小编Ila*_*rin的帖子

double在c#中被视为float

我在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),否则双精度将被视为浮点数.

有关更多信息: 浮点精度

c# precision floating-accuracy

5
推荐指数
0
解决办法
116
查看次数

标签 统计

c# ×1

floating-accuracy ×1

precision ×1