将1添加到一个小的double,使用Math.Net.Numerical返回1

时间:2017-01-03 23:56:45

标签: c# double precision

当我将一个小的double添加到1时,结果为1:

tmpResult[q] = 7.8879654121609884E-88  

tmpResult[q] = tmpResult[q] + 1.0;

tmpResult [q] = 1

我知道double只有18个精度,但我使用的是Math.Net.Numerical 它只能用于double(int optional)。

有什么问题?

1 个答案:

答案 0 :(得分:2)

没有问题。

1.0的IEEE754双精度表示是

  

0x3FF0000000000000

下一个最大的double

  

0x3FF0000000000001

其小数值为

  

1.0000000000000002220446049250

您要表示的数字是

  

1.0000000000000000000000000000000000000000000000000000000000 00000000000000000000 00000000007887965 ...

此值的最接近的双精度数精确为1.0,因此这是从操作中正确返回的值。