为什么是双重的.MaxValue + double.不是2倍,是无穷
本文关键字:2倍 不是 double MaxValue 为什么 | 更新日期: 2023-09-27 18:08:50
我正在看这个答案,但有一个问题我答不上来。可能是因为我有一个数学家的头脑,所以如果这是一个太简单的问题,请原谅我。
为什么不产生Infinity.
double.MaxValue + double.Epsilon
无论Epsilon的值有多小,当它加到最大值时,它应该把最大值增加一个小的精度。为什么在这种情况下没有增加?
这是我一直在试验的dotnetfiddle
在默认的最接近四舍五入模式下,加法的数学结果必须在double.MaxValue
和下一个浮点值之间的中点以上,如果指数范围更大,浮点结果才能四舍五入到无穷大。
在double.MaxValue
和这个中点之间产生的数学结果被四舍五入到double.MaxValue
。
double.Epsilon
远小于double.MaxValue
到这个中点的距离,因此浮点加法的结果是double.MaxValue
。
这种现象通常被称为"吸收"(不仅当其中一个和为double.MaxValue
时,而且当两个和的比值达到与最大和相同的结果时)。