我正在经历this answer但无法回答一件事。可能是因为我有一位数学家的心态,所以如果这个问题太简单,请原谅我。
为什么这不会导致无限。
double.MaxValue + double.Epsilon
然而,Epsilon的小值,无论何时加到最大值,都应该以较小的精度增加最大值。为什么在这种情况下没有增加?
以下是我一直在尝试的dotnetfiddle。
答案 0 :(得分:2)
在默认的最近舍入模式中,加法的数学结果必须高于double.MaxValue
和下一个浮点值之间的中间点,如果指数范围更宽,则可以表示下一个浮点值浮点结果向上舍入到无穷大。
导致double.MaxValue
与此中间点之间的数学结果的操作向下舍入为double.MaxValue
。
double.Epsilon
远小于double.MaxValue
与此中间点之间的距离,因此浮点加法的结果为double.MaxValue
。
这种现象一般称为“吸收”(不仅在其中一个加数为double.MaxValue
时,而且只要求和之间的比率使得结果与最大加数相同)。