Language agnostic 多项式的朴素评估对精度有何影响?

Language agnostic 多项式的朴素评估对精度有何影响?,language-agnostic,polynomial-math,polynomials,Language Agnostic,Polynomial Math,Polynomials,在此代码复查中,请回答: 我发现了以下内容(前面有嵌套的引号!): 让我引用《C++中的数字配方书》(也适用)< /P> 我们假设您知道的足够多,永远不会以这种方式计算多项式: p=c[0]+c[1]*x+c[2]*x*x+c[3]*x*x*x+c[4]*x*x*x*x; 或者(更糟!) 随着(计算机)革命的到来,所有被判犯有此类犯罪行为的人都将被立即处决,他们的程序也不会被删除 (你可以在分析索引中找到你的版本中的“双关语,特别糟糕”条目下的页面。我喜欢这本书。) 不这样做有两个原因:准确

在此代码复查中,请回答:

我发现了以下内容(前面有嵌套的引号!):

让我引用《C++中的数字配方书》(也适用)< /P> 我们假设您知道的足够多,永远不会以这种方式计算多项式:

p=c[0]+c[1]*x+c[2]*x*x+c[3]*x*x*x+c[4]*x*x*x*x;
或者(更糟!)

随着(计算机)革命的到来,所有被判犯有此类犯罪行为的人都将被立即处决,他们的程序也不会被删除

(你可以在分析索引中找到你的版本中的“双关语,特别糟糕”条目下的页面。我喜欢这本书。)

不这样做有两个原因:准确性和性能。计算多项式的正确方法如下所示:

-t * (0.319381530  +  t * (-0.356563782 + t * (1.781477937 + t * (-1.821255978 + 1.330274429 * t))))
我可以看到以任何令人沮丧的方式实施它会带来严重的性能损失,但不会带来准确性损失这对准确性有何影响?


我找到了这本书,但没有找到引用位附近的任何信息。

每个浮点运算都只是一个近似值。这种方法使用较少的运算,因此结果更准确

当您有非常大或非常小的数字时,它还有另一个优势。假设所有系数的数量级都相同,那么所有的项也都是相同的数量级。如果计算一个系数在x=0.1时约为1的5阶多项式,最简单的方法是将0.1添加到10^-5,从而降低精度


顺便说一句,这被称为

有人投票认为这是一个主观问题,我真的不认为这是一个主观问题!我将标题从“为什么”改为“如何”,试图更清楚地表达我自己。或者说,鲁菲尼方法/定理。在一场关于优先权的准宗教战争中。这很可能是荒谬的,因为这种评估方法很可能是这个时代的民间传说,只有Ruffini/Horner/Holdred将其作为其他结果的一部分记录下来,例如多项式的牛顿方法的最有效实现。
-t * (0.319381530  +  t * (-0.356563782 + t * (1.781477937 + t * (-1.821255978 + 1.330274429 * t))))