При сохранении double в строку происходит некоторая потеря точности.Даже если вы используете очень большое количество цифр, преобразование может быть необратимым, т. Е. Если вы конвертируете double x
в строку sx
, а затем конвертируете обратно, вы получите число x'
, которое не может быть битовымдо x
.Это может вызвать некоторые проблемы, например, при проверке различий в батарее тестов.Одна возможность - использовать двоичную форму (например, нативную двоичную форму или HDF5), но я хочу сохранить число в текстовом файле, поэтому мне нужно преобразовать в строку.У меня есть рабочее решение, но я спрашиваю, есть ли какой-то стандарт для этого или лучшее решение.
В C / C ++ вы могли бы привести значение типа double к некоторому целочисленному типу, например char*
, а затем преобразовать каждый байт в гекса длины 2 с помощью printf("%02x",c[j])
.Тогда, например, PI будет преобразован в строку длиной 16: 54442d18400921fb
.Проблема в том, что если вы читаете гекса, вы не понимаете, какое это число.Так что я был бы заинтересован в некотором миксе, например, пи -> 3.14{54442d18400921fb}
.Первая часть - это (вероятно, с низкой точностью) десятичное представление числа (обычно я использую выходное преобразование "%g"
), а строка в фигурных скобках - это шестнадцатеричное представление без потерь.
РЕДАКТИРОВАТЬ: Я передаю код aswer