Предоставленные ответы, к сожалению, неверны.
Второе уравнение p = (((a/x + b)/x + c)/x + ...) является лишь маргинальным хуже для точности и намного, намного хуже для скорости.
Почему? Относительные ошибки для умножения имеют только основной линейный член и небольшой квадратичный член. Отдел в отличие вводит выше, но очень малые члены (кубический, квартичные):
е = относительной погрешности, предполагается постоянным для обоих терминов
а * Ь = а (1 + е) б (1+ e) = a b (1 + 2e + e^2) // умножение
a/b = a (1 + e) / b (1 + e) = a/b (1 + e) (1 + е + е^2 + е^3 + ...геометрические ряды) // деление
Таким образом, разделение всегда немного хуже, чем умножение. Для соображений скорости: деления всегда медленнее, чем умножения, нормальный коэффициент может варьироваться от 3x до 10x. Таким образом, вложенные деления много медленнее, чем вложенные умножения, если вы не вычисляете последний коэффициент x^n не по pow(), а по вложенному умножению.
x^n может быть легко вычислен петлями, умножающей результат double power = x; для (n-1) мощность * = x;
Если вы используете pow(), имейте в виду, что он в основном удобно вычисляется экспоненциально и логарифмом, занимая гораздо больше времени, чем необходимо (100x).
Вы знаете, что в то время как ошибка между двойным и точным результатом остается небольшой, Полином результаты очень чувствителен к изменениям х для высшего п-х?! Итак, если вы используете более высокий n, имейте в виду, что ваши ответы могут быть полностью отключены от знака , потому что небольшие ошибки в x астрономически усиливаются.
Согласовано - сложение и вычитание являются настоящими виновниками потери точности, и здесь нет никакой реальной разницы. –