Получить строку «0.1» после присваивания двойной переменной

У меня наивный вопрос о высокоточном преобразовании чисел (здесь, в 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?

1

Решение

Предположим, что во время присваивания десятичное число 0.1 округляется до двойного значения. X это не равно десятичному числу 0,1. Теперь предположим, что некоторые другие результаты вычислений в значенииX, но без округления. Чтобы различать эти два, вам нужно где-то хранить источник. Для этого просто нет места в двойнике (при условии общих реализаций), поэтому ответ на ваш вопрос — «нет».

0

Другие решения


По вопросам рекламы [email protected]