简化计算步骤以减少误差
同样一个计算问题,若能减少运算次数,既可以节省计算机的计算时间,还可以减小舍人误差。
例
计算 x 255 x^{255} x255的值.
如果逐个相乘要用 254 次乘法,但若写成
x
255
=
x
⋅
x
2
⋅
x
4
⋅
x
8
⋅
x
16
⋅
x
32
⋅
x
64
⋅
x
128
,
x^{255}=x\cdot x^2\cdot x^4\cdot x^8\cdot x^{16}\cdot x^{32}\cdot x^{64}\cdot x^{128},
x255=x⋅x2⋅x4⋅x8⋅x16⋅x32⋅x64⋅x128,
只要做 14 次乘法运算即可。
再例如计算多项式的值
P n ( x ) = a n x n + a n − 1 x n − 1 + ⋅ ⋅ ⋅ + a 1 x + a 0 P_n(x)=a_nx^n+a_{n-1}x^{n-1}+\cdotp\cdotp\cdotp+a_1x+a_0 Pn(x)=anxn+an−1xn−1+⋅⋅⋅+a1x+a0
若直接计算 a k x k a_kx^k akxk再逐项相加,一共需做
n + ( n − 1 ) + ⋅ ⋅ ⋅ + 2 + 1 = n ( n + 1 ) 2 n+(n-1)+\cdotp\cdotp\cdotp+2+1=\frac{n(n+1)}2 n+(n−1)+⋅⋅⋅+2+1=2n(n+1)
次乘法和 n n n次加法.
若采用秦九韶算法
{ S n = a n , S k = x S k + 1 + a k P n ( x ) = S 0 , ( k = n − 1 , n − 2 , ⋅ ⋅ ⋅ , 0 ) , \begin{cases}S_n=a_n,\\S_k=xS_{k+1}+a_k\\P_n(x)=S_0,\end{cases}(k=n-1,n-2,\cdotp\cdotp\cdotp,0), ⎩ ⎨ ⎧Sn=an,Sk=xSk+1+akPn(x)=S0,(k=n−1,n−2,⋅⋅⋅,0),
只要做 n n n次乘法和 n n n次加法就可算出 P n ( x ) P_n(x) Pn(x)的值。