У меня наивный вопрос о высокоточном преобразовании чисел (здесь, в C ++).
Предположим, что пользователь присваивает 0,1 двойной переменной x_d с помощью этого оператора,
x_d = 0.1
Известно, что x_d
Полученный таким образом не более точно 0.1
, из-за неизбежного округления машины.
Интересно, есть ли у нас еще способ вернуть исходную высокоточную строку «0.1» из двойной переменной? x_d
? Понятно, что бесполезно использовать std::to_string (x_d)
Вот. Даже высокоточная библиотека, как boost::multiprecision
или MPFR кажутся беспомощными. Например, std::to_string(boost:cpp_dec_float_10000(x_d) )
не может восстановить потерянную точность.
Итак, мой вопрос, можем ли мы получить обратно строку «0.1» из двойного x_d
который присваивается с помощью оператора x_d = 0.1
?
Предположим, что во время присваивания десятичное число 0.1 округляется до двойного значения. X
это не равно десятичному числу 0,1. Теперь предположим, что некоторые другие результаты вычислений в значенииX
, но без округления. Чтобы различать эти два, вам нужно где-то хранить источник. Для этого просто нет места в двойнике (при условии общих реализаций), поэтому ответ на ваш вопрос — «нет».