Страницы

Поиск по вопросам

вторник, 30 октября 2018 г.

Почему в Delphi MinDouble > 0?

If MinDouble > 0 Then // -> всегда True If MinDouble < 0 Then // -> всегда False
... И как с ним правильно сравнивать?
Попробую подробнее объяснить суть вопроса: минимальное и максимальное возможное значение для того и нужно, чтобы определять границы диапазона. Для того и заведены эти константы. И то, что минимальное значение больше нуля это странно, т.к. отрицательные значения этому типу никто не запрещал присваивать. На практике получается все отрицательные числа меньше минимального значения, хотя на то оно и минимальное, чтобы меньше его ничего не было.


Ответ

Заблуждение в том, что:
в отличии от целых чисел, где минимальное - это наиболее отрицательное значение минимальное число типа Double (и аналогичных типов с "плавающей" точкой) - это минимальное отличное от нуля значение.
Дело в том, что знак числа с точкой кодируется одним битом, и никак не влияет на минимальное / максимальное представляемые этим типом значения.
Таким образом:
MinDouble = 5.0e-324; Минимальное представимое число отличное от нуля MaxDouble = 1.7e+308; Максимальное представимое число отличное от нуля
Положительное или отрицательное число - для этих констант не важно, вы сами добавляете знак как вам нужно. Например, используя 4 числа и знак, получаем вот такие диапазоны:
[-MaxDouble .. -MinDouble] 0 [+MinDouble .. +MaxDouble]
P.S. И Delphi тут не при чем, в других ЯП всё так же.

Комментариев нет:

Отправить комментарий