Re[3]: Кастомный вывод double, помогите
От: B0FEE664  
Дата: 28.07.21 14:48
Оценка:
Здравствуйте, watchmaker, Вы писали:

W>Любую конечную двоичную дробь можно записать в виде конечной десятичной дроби. То есть возможно вывести в десятичном виде любое конечное значение, сохранённое в IEEE754 float, double и т.п. Другое дело, что такая запись может получится длинной: может потребоваться столько же десятичных цифр, сколько было двоичных в оригинальной дроби.


Действительно: конечная сумма двоек возведённых в отрицательную степень всегда имеет конечное представление в десятичной записи. Почему-то я об этом не думал никогда...

W>Кстати, практичные библиотеки часто не выводят полную десятичную дробь. А останавливаются когда уже выведенное десятичное значение оказывается самым ближним к выводимому floating-point числу среди всех floating-point чисел, представимых в заданном типе.

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

Я правильно понимаю, что стандартных средств для этого такого вывода (без потери точности) в С/С++ нет?
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.