利用牛顿迭代法快速求平方根
下面我来介绍一种比起C里面库函数sqrt()快一些的算法来求一个数的平方根。
算法的主要过程是:首先我们设要求的这个数为a,它的平方根为x;然后我们一开始令x=a;然后我们进入一个循环,不断的令x=(x+a/x)/2,就是令x等于 x和a/x的平均值,这样迭代了7-10次左右就可以得到a的平方根x的近似值。
假如我们求10的平方根,那么a=10,x=10;
( 10 + 10/10 ) / 2 = 5.5
( 5.5 + 10/5.5 ) / 2 = 3.659090909….
( 3.659090909 + 10/3.659090909)/2=3.1960050818631…..
……
写成code的话就是这样:
double sqrt(double a){
double x;
x=a;
for(int i=1;i<=10;i++)
x=(x+a/x)/2;
return x;
}
这个算法的原理很简单,我们令f(x)=x^2-a,那么我们就是利用牛顿迭代法来求x^2-a=0的根。