所以我的手上有一点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# ×1