使用 Math.Net.Numerical 将 1 加到小双 returns 1

Adding 1 to a small double returns 1 using Math.Net.Numerical

当我将一个小双精度数加到 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的IEEE754双精度表示是

0x3FF0000000000000

下一个最大的 double

0x3FF0000000000001

它的十进制值为

1.0000000000000002220446049250

您要代表的号码是

1.0000000000000000000000000000000000000000000000000000000000‌​00000000000000000000‌​00000000007887965....

最接近此值的双精度数恰好是 1.0,因此这是从操作中正确 returns 的值。