【发布时间】:2009-07-28 11:59:39
【问题描述】:
我正在使用以下代码,但在某些神秘的情况下,添加的结果与预期的不同:
double _west = 9.482935905456543;
double _off = 0.00000093248155508263153;
double _lon = _west + _off;
// check for the expected result
Debug.Assert(_lon == 9.4829368379380981);
// sometimes i get 9.48293685913086 for _lon (which is wrong)
我在我的应用程序中使用了一些本机 DLL,我怀疑某些 DLL 是造成这种“错误计算”的原因,但我需要找出是哪一个。 谁能给我一个提示如何找出我的问题的根源?
【问题讨论】:
-
我在这里所说的也适用于 double:stackoverflow.com/questions/1193554/…
-
问题的根源是浮点精度设置错误。有人将浮点精度设置为 24 位,这会导致计算错误。使用 _fpreset 或 _controlfp(MSVC 运行时 dll 的)可以纠正这个问题,但谁首先设置这个精度仍然是个谜?
-
另一个例子:0.8 + 0.4 = 1.2000000000000002
-
其他简单示例:
0.1 * 0.1 = 0.010000000000000002、0.1 + 0.2 = 0.30000000000000004、0.1 * 0.2 = 0.020000000000000004、0.1 - 0.3 = -0.19999999999999998、0.2 + 0.1 = 0.30000000000000004、0.2 * 0.1 = 0.020000000000000004、0.2 * 0.2 = 0.04000000000000001、0.2 - 0.3 = -0.09999999999999998、0.3 - 0.2 = 0.09999999999999998、0.3 - 0.2 = 0.09999999999999998@ :)
标签: c# .net floating-point double addition