C: как долго может быть двойной при печати через printf ()
Вопрос
Мне нужно указать точную длину строки для печати из двойного значения, но я не хочу ограничивать вывод больше, чем необходимо.
Какова максимальная длина, которую будет иметь 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 (), которые ускользнули от меня.