C: как долго может быть двойной при печати через printf ()

StackOverflow https://stackoverflow.com/questions/1012747

  •  06-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

используйте printf("%.6g", doubleValue) или printf("%.6Lg", doubleValue)

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

Также обратите внимание, что нижний регистр " l " будет указывать, что ваше значение является длинным Int. & Quot; L & Quot; задает длинное двойное значение.

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

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

Другие советы

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

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

Там & float.h > содержит много полезных значений, в том числе DECIMAL_DIG, однако для long double , однако.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top