小编cct*_*tsm的帖子

在特殊情况下双打失去数字(无int转换)

所以我的手上有一点WTF:双精度数学根据它运行的线程返回不同的结果.

码:

double d = 312554083.518955;
Console.WriteLine(d);
d += 0.1d;
Console.WriteLine(d);

d = 2554083.518955;
Console.WriteLine(d);
d += 0.1d;
Console.WriteLine(d);
Run Code Online (Sandbox Code Playgroud)

这打印:

312554083,518955
312554080
2554083,518955
2554083,5
Run Code Online (Sandbox Code Playgroud)

但如果我在闪亮的新线程上执行它,它会返回:

312554083,518955
312554083,618955
2554083,518955
2554083,618955 
Run Code Online (Sandbox Code Playgroud)

(你知道,这是正确的结果)

正如你所看到的,有些东西切断了八位数字,无论是小数还是数字.我在返回错误结果的线程上运行了相当多的本机代码(DirectX(SlimDX),Freetype2,FMOD); 也许他们正在配置FPU来做这件事或者其他什么.但是,这段代码是纯C# - 无论它运行在哪个线程上,它编译的MSIL都是相同的.

以前有人见过这样的东西吗?原因是什么?

c#

4
推荐指数
1
解决办法
114
查看次数

标签 统计

c# ×1