多项式:a0x^0 + a1x^1 +a2x^2 + a3x^3 + ... + anx^n
数组:array_a[] = {a0, a1, a2, a3 ... an};
我用Java写了一个计算多项式的函数:
public double cal(double x) {
double y = 0.0;
for (int index = array_a.length - 1; index >= 0; index--) {
y = array_a[index] + y * x;
}
return y;
}
这种方法似乎比循环 y += array_a[index] * Math.Pow(x, index);
快5倍。
但是我在想是否有更好的计算多项式的方法?
对于那些认为这是不同计算的人:我测试过上述函数。它与 y += array_a[index] * Math.Pow(x, index);
做的是相同的事情,它们会计算出相同的结果。
谢谢。
double y = 0; double x_n = 1; for (i = 0; i < length; i++) { y += array[i] * x_n; x_n *= x; }
- 从性能上来看,它可能与你的版本相当。 - assyliasn
次加法操作和n+1
次乘法操作。这是无法减少的。通过使用a0 + x * (a1 + x*(a2 +... ))
公式,您已成功消除了幂运算。好吧,技术上说,通过乘以x^0
可以消除,因此只需要n
次乘法操作。您的代码当前正在执行n+1
次加法和乘法操作,因此可以稍微调整一下。请注意,n = array_a.length - 1. - Andreas