c# – 为什么double.MaxValue double.Epsilon不是double.Infinity?

参见英文答案 >
Why [float.MaxValue == float.MaxValue + 1] does return true?                                    5个

我经历了
this answer,无法回答一件事.可能是因为我有数学家的想法,所以如果这个问题太简单,请原谅我.

为什么这不会导致无限.

double.MaxValue + double.Epsilon

然而,Epsilon的小值,无论何时加到最大值,它都应该以较小的精度增加最大值.为什么在这种情况下没有增加?

这是我一直在试验的dotnetfiddle.

最佳答案 在默认的最近舍入模式中,加法的数学结果必须高于double.MaxValue和下一个浮点值之间的中间点,如果指数范围对于浮点结果更宽,则可以表示圆形到无穷大.

导致double.MaxValue和此中间点之间的数学结果的操作向下舍入为double.MaxValue.

double.Epsilon远小于double.MaxValue和这个中间点之间的距离,因此浮点加法的结果是double.MaxValue.

这种现象一般称为“吸收”(不仅当其中一个加数是double.MaxValue时,但只要求和之间的比率使得结果与最大加数相同).

点赞