为什么 double.MaxValue + double.Epsilon 不是 double.Infinity?
Why is double.MaxValue + double.Epsilon not double.Infinity?
我正在经历 并且无法回答一件事。可能吧,因为我有数学家的头脑,所以问题太简单还请见谅
为什么这不会导致 Infinity。
double.MaxValue + double.Epsilon
无论 Epsilon 有多么小的值,每当它被添加到最大值时,它应该将最大值增加一个小的精度。为什么在这种情况下没有增加?
这是我一直在试验的 dotnetfiddle。
在默认的最接近的舍入模式下,如果指数范围是更宽的浮点结果舍入为无穷大。
在 double.MaxValue
和这个中间点之间产生数学结果的运算向下舍入为 double.MaxValue
。
double.Epsilon
远小于double.MaxValue
到这个中点的距离,所以浮点加法的结果是double.MaxValue
.
这种现象通常被称为“吸收”(不仅当其中一个被加数是double.MaxValue
时,而且只要被加数之间的比率使得结果与最大的被加数相同).
我正在经历
为什么这不会导致 Infinity。
double.MaxValue + double.Epsilon
无论 Epsilon 有多么小的值,每当它被添加到最大值时,它应该将最大值增加一个小的精度。为什么在这种情况下没有增加?
这是我一直在试验的 dotnetfiddle。
在默认的最接近的舍入模式下,如果指数范围是更宽的浮点结果舍入为无穷大。
在 double.MaxValue
和这个中间点之间产生数学结果的运算向下舍入为 double.MaxValue
。
double.Epsilon
远小于double.MaxValue
到这个中点的距离,所以浮点加法的结果是double.MaxValue
.
这种现象通常被称为“吸收”(不仅当其中一个被加数是double.MaxValue
时,而且只要被加数之间的比率使得结果与最大的被加数相同).