本文来源:http://blog.csdn.net/xiaoguohaha/article/details/21652643

文章太牛了,里面的算法更是让我膜拜万分,不得不转过来收藏一下。

 

 


 

     我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来实现这个经常调用的函数呢?

     虽然有可能你平时没有想过这个问题,不过正所谓是“临阵磨枪,不快也光”,你“眉头一皱,计上心来”,这个不是太简单了嘛,用二分的方法,在一个区间中,每次拿中间数的平方来试验,如果大了,就再试左区间的中间数;如果小了,就再拿右区间的中间数来试。比如求sqrt(16)的结果,你先试(0+16)/2=8,8*8=64,64比16大,然后就向左移,试(0+8)/2=4,4*4=16刚好,你得到了正确的结果sqrt(16)=4。然后你三下五除二就把程序写出来了:

 1 //用二分法
 2 float SqrtByBisection(float n)
 3 {
 4     //小于0的按照你需要的处理
 5     if(n < 0)
 6         return n;
 7     float mid,last;
 8     float low,up;
 9     low=0,up=n;
10     mid=(low+up)/2;
11     do
12     {
13         if(mid*mid>n)
14             up=mid;
15         else
16             low=mid;
17         last=mid;
18         mid=(up+low)/2;
19     }
20     //精度控制
21     while(abs(mid-last) > eps);
22     return mid;
23 }
View Code

相关文章: