#strtod
#strtod
Вопрос:
кто-нибудь может объяснить мне, что происходит?
double dbl = stdtod("9999999999999999", NULL);
Я получил значение: 9999999999999998
и не: 9999999999999999
Я не понимаю, почему это происходит, в MSDN указано, что максимальное двойное число равно 1.7976931348623158E 308
, поэтому это не может быть переполнением.
Спасибо
Комментарии:
1. Но это не говорит о том, что все числа между минимальным и максимальным представимы. Кровавые подробности в «Что каждый специалист по информатике должен знать об арифметике с плавающей запятой» .
Ответ №1:
Это не переполнение, это проблема с тем, как работает плавающая точка. У вас ограниченное количество значащих цифр, которое превышается задолго до того, как вы получите переполнение. На это было связано много раз, но проверьте это