自己实现的一个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函数的主要内容,如果未能解决你的问题,请参考以下文章