Здравствуйте, B0FEE664, Вы писали:
W>>То есть условный FloatToString выводит минимальную по длине строку, для которой начинает выполнятся StringToFloat(FloatToString(x)) == x. Так десятичная дробь хотя и оказывается формально не равной исходному числу, но при чтении однозначно превращается в него обратно, так как длинный хвост младших десятичных разрядов всё равно не представим в исходном double или float. И поэтому для целей конвертации потери точности не происходит, а длина записи получается значительно короче.
BFE>Я правильно понимаю, что стандартных средств для этого такого вывода (без потери точности) в С/С++ нет?
Так в том и дело, что нет потери точности

Ну или скорее нужно сказать, что в разных контекстах под этим подразумевается разное.
То есть в описании какого-нибудь
to_chars сказано, что выводимая строка по умолчанию будет самой короткой, которая будет допускать однозначное восстановление исходного числа. Если исходное значение восстанавливается точно, то значит и потери точности нет. Так что тут всё хорошо.
В какой-то другой задаче это может быть не так, и там нужно получать длинную строку. Но это уже другая задача.
А если хочешь получить длинную запись, то, конечно, никто тебя не ограничивает в возможности указать и получить свои 54 значащих цифры для double, явно передав нужное число в условный
sprintf. Только это может оказаться примером
ложной точности: цифр много, но при этом последние ⅔ из них ни на что не влияют — если их изменить и прочитать обратно double, то на результат это никак не повлияет.
Но стандартный способ есть.