本文来源: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 }