Почему оценивает "(Double.MinValue + 1)> Double.MinValue" значение false?

Я сначала попробовал это (в vb.net)

(Double.MinValue + Double.Epsilon) > Double.MinValue

но это значение равно false. Тогда я попробовал это

(Double.MinValue + 999999999999999999) > Double.MinValue

который также вычисляет значение false.

Почему?

Ответ 1

Добавление очень маленького значения (величины) к очень большой (величине) делает: практически никакой разницы. В этом случае разница настолько мала, что не может быть представлена ​​ с точностью 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 цифр этого огромного числа можно в значительной степени игнорировать.