DBL_MIN
не менее нормализованный положительное значение двойного. Это означает, что это минимальное значение, которое имеет мантисса не менее 1.0
. Вы можете пойти на меньшие номера, если вы выберете меньшую мантиссу.
Так что вы получаете Denormal number. Как Википедия выразилась,
В нормальной величине с плавающей точкой, нет ведущих нулей в мантиссе; вместо этого ведущие нули перемещаются в экспоненту. Таким образом, 0,будет написано как 1,23 × 10 -2. Денормальные числа - это числа, в которых это представление приведет к экспоненте, которая ниже минимальной экспонентой (показатель, обычно имеющий ограниченный диапазон). Такие числа представлены с использованием ведущих нулей в значении.
IEEE 754 standard регулирует представление double
(и другие типы с плавающей точкой). Представление состоит из показателя e
и мантиссы m
(и бита знака, что не имеет значения для этого вопроса).
Для показателя e
не равным нулю, соответствующее double
значение
(1 + m/2^52) * 2^(e-1023)
(^
обозначает мощность, и 52 число битов в m
, так что m/2^52
всегда находится между 0 включительно и 1 не включительно). Неявные (не входит в m
) 1
означает, что минимальное число, которое может храниться таким образом, соответствует m==0
и e==1
(помните, что e!=0
для этого представления), что дает значение
2^(-1022)
, который ок. 2.225074e-308
, то есть DBL_MIN
.
Однако e==0
обрабатывается особым образом. Для e==0
, неявный 1
падает, что приводит к
(m/2^52) * 2^(-1022) // remember that e==0
Это позволяет для представления точного нуля (с m==0
), а также для subnormals (или) для денормализованных чисел небольшой m
. Наименьшее возможное количество для m==1
, то есть 2^(-1074)
, или прибл. 4.940656e-324
.
Это объясняет это, спасибо. – Geom