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

BFE>Здравствуйте, Sm0ke, Вы писали:


S>>Выводит все хранимые цифры без округления (макс точность).

BFE>Насколько я понимаю, это возможно для вывода в формате использующим основание исчисления кратное двум. Так что в десятичном виде не получится.

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

Это в обратную сторону возникают проблемы (например, с числом 0.3, которое непредставимо в виде конечной двоичной дроби).

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