C: как долго может быть двойной при печати через printf () - PullRequest
5 голосов
/ 18 июня 2009

Мне нужно указать точную длину строки для печати из двойного значения, но я не хочу ограничивать вывод больше, чем необходимо.

Какова максимальная длина, которую будет иметь 6-значная двойная точность при форматировании с помощью printf ()?

В частности, какое значение я должен дать X в printf("%X.6lg",doubleValue);, чтобы гарантировать, что никакое значение не будет усечено?

Причина, по которой мне нужно быть точным в отношении длины, заключается в том, что я определяю производный тип данных MPI, состоящий из множества строковых представлений двойных значений, и должен знать их точную длину, чтобы разделить области файла между процессами MPI. .

Надеюсь, это понятно. Заранее спасибо за ответ.

Ответы [ 3 ]

6 голосов
/ 18 июня 2009

использовать printf("%.6g", doubleValue) или printf("%.6Lg", doubleValue)

Обратите внимание, что исключение начальных цифр ("ширины") в спецификаторе точности не требует длины интегральной части значения.

Также обратите внимание, что нижний регистр "l" будет указывать, что ваше значение длинное int. Буква «L» в верхнем регистре задает длинное двойное значение.

Также обратите внимание, что если вы не хотите, чтобы это значение потенциально могло быть заменено на научную нотацию (если это более короткое представление), то вы должны использовать " f "вместо" g ".

См. ссылку для печати здесь .

1 голос
/ 18 июня 2009

Максимальный показатель двойного IEEE равен 1023, поэтому наибольший двойной будет 1 + 1/2 + 1/4 + 1/8 + ... и т. Д. * 2 ^ 1023. Который будет иметь длину около 318 символов в десятичной записи.

Почему бы не использовать спецификатор формата "e"?

1 голос
/ 18 июня 2009

Существует , содержащий много полезных значений, среди которых DECIMAL_DIG, что для длинного двойного однако.

Этот же файл, скорее всего, скажет вам, что double на вашей платформе имеет точность более 6 цифр ...

PS: Также обратите внимание на ответ Деми выше. Он указывает на различные недостатки вашего printf (), которые ускользнули от меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...