Здесь мой тестовый код:
errno = 0;
d = strtod("1.8011670033376514e-308", NULL);
С помощью этого кода я получаю d == 1.8011670033376514e-308
и errno == ERANGE
.
Из strtod (3):
Если правильное значение вызовет переполнение, возвращается плюс или минус
HUGE_VAL
(HUGE_VALF
,HUGE_VALL
) (в соответствии с знаком значения), аERANGE
хранится вerrno
. Если правильное значение приведет к недопущению, возвращается ноль иERANGE
сохраняется вerrno
.
Итак, мне кажется, что либо errno
должен быть нулевым (без ошибок), либо d
должен быть равен нулю (underflow).
Это ошибка, или я чего-то не хватает? Это происходит для разных версий eglibc и gcc.