我第一次尝试这个(在vb.net中)
(Double.MinValue + Double.Epsilon) > Double.MinValue
但评估结果为假。然后我尝试了这个
(Double.MinValue + 999999999999999999) > Double.MinValue
也评估为假。
为什么?
我第一次尝试这个(在vb.net中)
(Double.MinValue + Double.Epsilon) > Double.MinValue
但评估结果为假。然后我尝试了这个
(Double.MinValue + 999999999999999999) > Double.MinValue
也评估为假。
为什么?
将非常小(幅度)的值添加到非常大(幅度)使得:几乎没有差别。在这种情况下,差异是如此之小 不能代表 在精度范围内 double
。基本上:
double.MinValue + (most things) === double.MinValue
它不能保证能够代表每一个人 double
之间 double.MinValue
和 double.MaxValue
,当你增加幅度时,可以表示的绝对分辨率会降低。
别忘了: double.MinValue
具有 308位数 在小数点之前。你改变的很少。你基本上是这样做的:
-179769313486232000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000 // yikes!
+ 999999999999999999
请记住 double
具有 大致 17位精度;所以这个庞大数字的291位数可以在很大程度上被忽略。