多项评估的准确性,乘对司
-
20-09-2019 - |
题
让我们说我们有多项在x,除力的x:
p = (a + x(b + x(c + ..)))/(x**n)
效率一边,这将更准确的计算数值,或使用上述区分:
p = (((a/x + b)/x + c)/x + ...)
感谢
解决方案
我认为的差异是最小的,除非有一个机会, x**n
溢出或下溢,在这种情况下应当使用第二的表达。
这两种表达方式不同的两个地方:
- 评估顺序被颠倒(...,c,b,a)第一个表达和(a,b,c,...)对于第二的表达。哪一个是最好的价值取决于系数。
- 第一个表达的
.../x**n
在结束。Jonathan解释说,由于这个原因可以预计,第二的表达是更加准确,因为它具有较少的行动。然而,我认为.../x**n
原因只有一个最低精确度的损失(与其他地方相比,你失去了精度),除非x**n
溢出或下溢.
其他提示
在理论上,不应该有任何差异 - 如果值与“无限”精确准确地计算出
Kernighan和Plauger状态在它们的古董但优秀的书“元素>”,即:
有一个聪明的程序员曾经说过,“浮点数是像颗颗小堆;每次移动一次,你失去了一点沙子,并获得一点点灰尘”
。
划分具有稍微更少的操作整体,这意味着有略少失去砂和增益污垢机会。
有一个详细的分析,很可能需要看看系数(A,B,C等),以及可能为x的值 - 当x是巨大的,当x接近零可能无法正常工作是什么在起作用,也不反之亦然。
提供的答案是错误的不幸
第二个等式P =(((A / X + B)/ X + C)/ X + ...)是唯一的边缘更坏 的准确性和更坏速度。
为什么呢?乘法的相对误差只有主线性项 和一个小的二次项。司在对比介绍较高,但 非常小的术语(立方体,四次):
E =相对误差,假定常数两个术语
A * B =(1 + E)的 B(1 + E)=一 B(1 + 2E + E ^ 2)//乘法
A / B =(1 + E)/ B(1 + E)= A / B(1 + E)(1 + E + E ^ 2 + E ^ 3 + ...几何级数)//分割
所以除法总是比乘法差些。 对于速度的考虑:师总是比乘法慢, 10倍 - 正常的因素可以从3倍不等。所以嵌套部门是多少 比嵌套乘法慢,如果你不计算最后一个因素 X ^ N不被POW(),但通过巢式的乘法运算。
的X ^ n可以通过环的结果相乘来容易地计算 双功率= X; 对第(n-1) 功率* = X;
如果您使用POW(),要知道,它主要是方便地计算 指数和对数,取比必要的(100×)更多的时间。
您了解,虽然双和详细的结果之间的误差仍然很小, 多项式结果的非常的为大的n的x的变化很敏感?! 所以,如果你使用的高N的注意,你的答案可能完全没谱 因为以x小误差天文扩增。