2010-02-25 2 views
3

Ссылаясь направильный путь, чтобы установить максимальную двойную точность для ostringstream

How do I print a double value with full precision using cout?

и

What is the meaning of numeric_limits<double>::digits10

Я немного запутался.

Должен ли я:

ss.precision(std::numeric_limits<double>::digits10); 

или

ss.precision(std::numeric_limits<double>::digits10 + 2); 

, чтобы получить максимальную двойную точность?

ответ

1

Это зависит от количества десятичных компонентов, которые у вас есть в данных.

STD :: numeric_limits :: digits10 даст максимальное количество «плавающей» компонента

ios_base :: Точность определяет количество цифр (десятичные + поплавок компоненты) для отображения.

Если ваш десятичный компонент всегда меньше 100 (от -99 до 99), код ниже всегда дает максимальную точность.

ss.precision(std::numeric_limits<double>::digits10 + 2); 
+0

Вы Lim Yeen Фей? : o –

+0

кто еще вы ожидаете :) – YeenFei

+0

Oh. Приятно видеть вас здесь. :) –

0

Согласно What is the meaning of numeric_limits<double>::digits10, в частности, наибольшее количество голосов ответ, std::numericlimits<double>::digits10 является:

максимальное количество цифр вы можете представить без потери точности.

Это означает, что если вы установите для него ss.precision, эти цифры с плавающей запятой будут точными; если вы установите его на +2, вы все равно покажете это + 2 цифры, но последние два не гарантированно будут точно рассчитаны.

Для arbitray точности, если это то, что вам нужно, посмотрите на mpir, gmp, mpfr

Смежные вопросы