Я пишу программу, которая печатает литералы с плавающей запятой, которые будут использоваться внутри другой программы.
Сколько цифр нужно печатать, чтобы сохранить точность исходного поплавка?
Так как float имеет 24 * (log(2) / log(10)) = 7.2247199
десятичные цифры точности, моя первоначальная мысль заключалась в том, что печати 8 цифр должно быть достаточно. Но если мне не повезло, те 0.2247199
распределяются слева и справа от 7 значащих цифр, поэтому я должен, вероятно, напечатать 9 десятичных цифр.
Правильно ли мой анализ? Является ли 9 десятичных цифр достаточным для всех случаев? Как printf("%.9g", x);
?
Существует ли стандартная функция, которая преобразует float в строку с минимальным количеством десятичных цифр, необходимых для этого значения, в случаях, когда 7 или 8 достаточно, поэтому я не печатаю ненужные цифры?
Примечание. Я не могу использовать шестнадцатеричные литералы с плавающей запятой, потому что стандартный С++ не поддерживает их.