自己实现的一个sqrt函数

Posted mtl6906

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自己实现的一个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/g + g) 

3       9     16/3    16/3 + 3

16/3+3    ......

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

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

以上是关于自己实现的一个sqrt函数的主要内容,如果未能解决你的问题,请参考以下文章

15常见算法实现sqrt函数

sqrt函数实现之卡马克方法

哈斯克尔。我很困惑这个代码片段是如何工作的

快速定点 pow、log、exp 和 sqrt

有没有办法将2个非常相似的代码片段组合成一个函数并重复?

实现sqrt()函数