strtod изменить последнюю цифру

Кто -то может объяснить мне, что происходит?

double dbl = stdtod("9999999999999999", NULL); 

Я получил значение: 9999999999999998
и не: 9999999999999999

Я не понимаю, почему это происходит, в MSDN указано, что максимальное двойное число 1.7976931348623158E+308так что это не может быть переполнением.

Спасибо

1 ответ

Это не переполнение, это проблема с тем, как работает плавающая точка. У вас есть ограниченное количество значащих цифр, которое превышено задолго до того, как вы получите переполнение. Это было связано слышать много раз, но проверить это

Другие вопросы по тегам