Страницы

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

среда, 18 декабря 2019 г.

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

#delphi #math


If MinDouble > 0 Then // -> всегда True
If MinDouble < 0 Then // -> всегда False


... И как с ним правильно сравнивать?

Попробую подробнее объяснить суть вопроса:
минимальное и максимальное возможное значение для того и нужно, чтобы определять
границы диапазона. Для того и заведены эти константы. И то, что минимальное значение
больше нуля это странно, т.к. отрицательные значения этому типу никто не запрещал присваивать.
На практике получается все отрицательные числа меньше минимального значения, хотя на
то оно и минимальное, чтобы меньше его ничего не было.
    


Ответы

Ответ 1



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

Ответ 2



Потому что MinDouble определяет минимальное абсолютное значение типа double MinDouble = 5.0e-324;

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

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