为什么是双重的.MaxValue + double.不是2倍,是无穷

本文关键字:2倍 不是 double MaxValue 为什么 | 更新日期: 2023-09-27 18:08:50

我正在看这个答案,但有一个问题我答不上来。可能是因为我有一个数学家的头脑,所以如果这是一个太简单的问题,请原谅我。

为什么不产生Infinity.

double.MaxValue + double.Epsilon

无论Epsilon的值有多小,当它加到最大值时,它应该把最大值增加一个小的精度。为什么在这种情况下没有增加?

这是我一直在试验的dotnetfiddle

为什么是双重的.MaxValue + double.不是2倍,是无穷

在默认的最接近四舍五入模式下,加法的数学结果必须在double.MaxValue和下一个浮点值之间的中点以上,如果指数范围更大,浮点结果才能四舍五入到无穷大。

double.MaxValue和这个中点之间产生的数学结果被四舍五入到double.MaxValue

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

这种现象通常被称为"吸收"(不仅当其中一个和为double.MaxValue时,而且当两个和的比值达到与最大和相同的结果时)。