Может ли быть что-то похожее на фактическое значение DBL_MAX
, которое нельзя точно представить в экспоненциальной нотации с 16 десятичными знаками (скажем, десятичное значение очень немного больше, чем основанное на двух представлениях), но при инициализации double
с DBL_MAX
тем не менее установит правильное значение (из-за округления). std::istringstream
может быть немного более разборчивым.
РЕДАКТИРОВАТЬ: На самом деле я обнаружил, что значение DBL_MAX
в моем компиляторе составляет 1.7976931348623158e + 308, что прекрасно работает для потоковой передачи. Ваш номер округлен и немного больше, отсюда и ошибка.
РЕДАКТИРОВАТЬ 2: Точное значение DBL_MAX
в десятичной форме задается (2 ^ (1023 - 52)) * (2 ^ 53 - 1)
, который не может быть представлен с 16 десятичными знаками.