Dot-Net
為什麼將“(Double.MinValue + 1)> 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 位可以在很大程度上被忽略。