Re[5]: string в double и странный результат =)
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 06.07.18 13:18
Оценка:
Здравствуйте, uzhas, Вы писали:

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


V>>для поддерживаемой точности double, которая составляет от 15 до 17 десятичных разрядов — значение 123.456 представимо без потерь


U>возможно, у нас разное понимание выражения "без потерь".

U>для меня выражения эквивалентны: не представимо в формате double точно, с потерями, с ошибками. 123.456 нельзя представить в виде суммы конечной последовательности степеней двойки, только бесконечной. поэтому говорят, что такие числа не представимы в формате double точно

О разных пониманиях — да, безусловно.
В этом плане очень удобную штуку показывает, например, Python. Для repr() для плавающего значения он выбирает то десятичное представление, которое наиболее короткое из конвертируемых в это двоичное значение. Для 123.456 это 123.456, значит, можно сказать, что это число представимо точно И так будет для любых значений до 15 десятичных цифр включительно.
Считаю, что в этом смысле нет проблем говорить о представлении без потерь.

U>это самое точное представление дабла в виде десятичной записи


В том и дело, что 123.456, 1.23456e+2 дадут то же представление.
The God is real, unless declared integer.
Re[5]: string в double и странный результат =)
От: vopl Россия  
Дата: 06.07.18 13:29
Оценка:
Здравствуйте, uzhas, Вы писали:

U>возможно, у нас разное понимание выражения "без потерь".


Ага. Я чето зарубился на строковом представлении для JSON, чтобы ТС мог гонять 123.456 туда-сюда.

А так — согласен, даже насчет бесконечности)
Re: string в double и странный результат =)
От: Erop Россия  
Дата: 08.07.18 01:40
Оценка: +1
Здравствуйте, niXman, Вы писали:

X>зы

X>в boost.multiprecision есть, вроде бы, необходимые классы, вот только не знаю, какой из них юзать...

если в этих даблах не больше 3-4 знаков после запятой, можно хранить их умноженными на 10 000...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: string в double и странный результат =)
От: fk0 Россия https://fk0.name
Дата: 19.07.18 07:52
Оценка:
Здравствуйте, niXman, Вы писали:

X>привет!


X>читаю некоторый JSON, в котором floating-point-values.

X>проблема в том, когда я привожу строку(парсер ведь строку хранить) в double — вместо '123.456' получаю '123.45999999998'.

Это ты получаешь обратно при переводе в строку. Например в printf("%f", val). Ну так делай printf("%.3f", val), оно округлит до трёх знаков после точки и девятки уйдут.

Проблема в том, что 123.456 в двоичной системе не представимо, там вот с девятками и получается.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.