计算多项式函数值技巧
形如\(f(x)=a_n·x^n+a_{n-1}·x^{n-1}+…+a_2·x^2+a_1·x+a_0\)的函数,叫做多项式函数,它是由常数与自变量x经过有限次乘法与加法运算得到的。
假设现在有一个最高次幂为n的函数,各项系数存储在数组a中,那么要计算这个函数的某一个函数值,可以:
double f(double x) {
double res = 0, t;
for (int i = n; i > 0; i--) {
t = 1;
for (int j = 0; j < i; j++) {
t = t * x;
}
res += t * a[i];
}
res += a[0];
return res;
}
这样计算速度非常慢,因为有很多重复的计算。
考虑这样一个多项式,\(f(x)=4·x^4+3·x^3+2·x^2+x+1\),可以对他进行变形:\(f(x)=((((0·x+4)·x+3)·x+2)·x+1)·x+1\),这样计算可以比边大量的重复运算,代码如下:
double f(double x) {
double res = 0;
for (int i = n; i >= 0; i--) {
res = res * x + a[i];
}
return res;
}