自己实现的一个sqrt函数

看了MIT的6.00的计算机科学导论课的第一节,其中,老师讲的一个sqrt的实现算法记忆犹新。

代码如下:

#include <stdio.h>
#define E 1e-10
double Abs(double a,double b){
        if(a-b<0){
                return b - a;
        }
        return a - b;
}
double Sqrt(double value){
        double i,last=0,cur=0;
        for(i=0;i*i<value;i++);
        i--;
        do{
                last = cur;
                i = (value/i+i)/2;
                cur = i*i;
        }while(Abs(cur,last) > E);
        return i;
}

代码写的有点丑,效率可能也不会比库函数高(记得网上看到过有比库函数效率高的,不过你们自己去查把。。。),但是大致的思想还是很有收获的。

这个算法就是根据一个数的平方根的平方等于这个数来建立的。

假设求的是16的平方根

猜想数g   g^2    x/g   (x+x/g)/2  |x-x/g| 

3       9     16/3   (16/3+3)/2 |3-16/3|

16/3+3    ......

依次迭代直到x - g^2达到指定的精度,就是所求得结果,我这里设置的是E = 10e-10。

然后就是感叹一下,同样是大学,差距真的是。。。。

posted @ 2017-09-22 19:27  mtl6906  阅读(369)  评论(0编辑  收藏  举报