Добавление очень маленького значения (величины) к очень большой (величине) делает: практически никакой разницы. В этом случае разница настолько мала, что не может быть изображена с точностью 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 цифр этого огромного числа можно в значительной степени игнорировать.
Теперь я нашел http://msdn.microsoft.com/de-de/library/system.double.epsilon%28v=vs.110%29.aspx: «Однако свойство Epsilon не является общей мерой точность двойного типа, применяется только к двойным экземплярам с нулевым значением или показателем -1022 ». – habakuk