2016-11-30 11 views
-1

При использовании приближения для вашего результата (например, при вычислении корней или деления с некоторыми ограничениями) существует ли способ узнать, соответствует ли аппроксимация точному результату в ряде цифр (делая их значащими цифрами), не зная точных результат?Можно ли выводить результат с 15 значащими десятичными числами без вычисления точного результата?

Конкретная проблема, над которой я работаю, аппроксимирует a/b в C++, используя только деление на 2 (бит-сдвиг) с использованием метода Ньютона. Аппроксимация должна быть точной для 15-го десятичного числа. Однако я не могу знать точный результат a/b для b! = 2, или я ошибаюсь?

Спасибо за все ответы.

+1

Как вы пытаетесь представить значения? Как фиксированные десятичные точки или «двойные» значения. В последнем случае читаем о [Является ли математика с плавающей запятой?] (Http://stackoverflow.com/questions/588004/is-floating-point-math-broken). –

+0

@ πάντα ῥεῖ, я использую значения «double», но как это отвечает на мой вопрос? Достаточно ли просто просто использовать тип 'double', так как он соответствует 15 десятичным знакам? –

+0

Можете ли вы поделиться своим текущим кодом? –

ответ

0

Любой надежный метод решения уравнения включает в себя вычисление диапазона, содержащего корень, причем диапазон становится более узким с каждой итерацией. Вы останавливаетесь, когда диапазон становится достаточно узким - ниже 1e-15 в вашем примере.

Newton не использует диапазон, но я не могу представить, как вы собираетесь использовать Newton с делением на 2, так или иначе.

+0

Здравствуйте, @Eugene, a/b можно вычислить методом Ньютона, используя только умножение, сложение и подстановку, однако для умножения используется алгоритм Карацубы, где используется деление. –