我正在阅读这篇答案,但有一点我不明白。也许是因为我具有数学家的思维方式,所以如果问题太简单,请原谅。
为什么这不会得到无穷大?
为什么这不会得到无穷大?
double.MaxValue + double.Epsilon
无论Epsilon的值有多小,只要它加到最大值上,就应该使最大值增加一小精度。为什么在这种情况下没有增加呢?
这是我一直在实验的 dotnetfiddle 。
double.MaxValue + double.Epsilon
无论Epsilon的值有多小,只要它加到最大值上,就应该使最大值增加一小精度。为什么在这种情况下没有增加呢?
这是我一直在实验的 dotnetfiddle 。
double.MaxValue
和下一个可表示的浮点数之间中点的位置,如果浮点数结果的指数范围更宽,则结果要向上舍入为正无穷大。double.MaxValue
和该中点之间的操作将向下舍入为 double.MaxValue
。
double.Epsilon
远小于 double.MaxValue
和该中点之间的距离,因此浮点加法的结果为 double.MaxValue
。double.MaxValue
时,而且只要加数之间的比率使结果与最大的加数相同)。var i = double.MaxValue - 100000000000000000000000000000000000000000000000000000000000000000000.0; (i == double.MaxValue).Dump();
返回 true
。我的第一次测试是减去1,我认为这是由于精度问题。但这怎么可能呢..? - Rob100000000000000000000000000000000000000000000000000000000000000000000.0
(大约70个零)比double.MaxValue
(~1e308)小得多,甚至比如果指数范围更宽,则double.MaxValue
和下一个可表示的浮点数之间的差异要小(去掉约16个零,结果应该在1e292左右,误差可能为100倍左右) 。 - Pascal Cuoq
1E292d
:)) - Alexei Levenkov