不用sqrt()函数,如何求平方根

1,牛顿迭代法

牛顿法的作用是使用迭代的方法来求解函数方程的根。简单地说,牛顿法就是不断求取切线的过程。

他可以快速求出平方根的近似值。

例如,我们想求n的平方根(n>0),他的标准值是x.

f(x)=x^2-n  就是这个函数与x轴交点出的正值就是所求x。

首先随便猜一个近似值x,然后不断令x等于x和a/x的平均数,迭代个六七次后x的值就已经相当精确了。

不用sqrt()函数,如何求平方根_第1张图片

我们不断用过一个点的切线与x轴相交的点来逼近真实值就好了。例如我们假设x0,那么就有一点(x0,f(x0))在这条曲线上,切线的斜率为2*x0.我们很容易求出这条切线与x轴的交点坐标((n+x0^2)/(2*x0),0)

得出下一个逼近值是(x0+n/x0)/2,继续带入逼近多次即可。

但是,有可能会遇到牛顿迭代法无法收敛的情况。比如函数有多个零点,或者函数不连续的时候。

double sqrt1(int n)
{
    if(n<=0) return -1;
    double res=1;
    while(res*res-n>1e-9||res*res-n<-1e-9)
    {
        res=(res+n/res)/2;
    }
    return res;
}


你可能感兴趣的:(算法)