sqrt()平方根計算函數的實現1——二分法


C語言標准庫:

http://www.cplusplus.com/reference/cmath/

在一個區間中,每次拿中間數的平方來試驗,如果大了,就再試左區間的中間數;如果小了,就再拿右區間的中間數來試。比如求sqrt(16)的結果,你先試(0+16)/2=8,8*8=64,64比16大,然后就向左移,試(0+8)/2=4,4*4=16剛好,得到了正確的結果sqrt(16)=4。

實現時我第一次沒有進行精度控制,導致一些不能完整開方的數運行不出來,也忘記了對非整數的判斷。代碼1為改正后的代碼,后面代碼2為第一次寫的代碼,貼在這里以作對比提醒。

代碼1:

esp常在C++中用來控制迭代精度,是函數程序事先聲明的常量,在微積分中是無限小值。

float esp=0.000000;

double sqrt(double x)

{

       double down,up,n,last;

       down=0;

       up=x;

       n=(down+up)/2;

       if(x<=0)

       return x;

       while((n*n!=x)&&abs(last-n)>esp)

       {

              if(n*n<x)

              {

                     down=n;

                     last=n;

                     n=(down+up)/2;

              }

              else

              {

                     up=n;

                     last=n;

                     n=(down+up)/2;

              }

       }

       return n;

}

代碼2:

double sqrt(double x)

{

       double down,up,n;

       down=0;

       up=x;

       n=(down+up)/2;

       while(n*n!=x)

       {

              if(n*n<x)

              {

                     down=n;

                     n=(down+up)/2;

              }

              else

              {

                     up=n;

                     n=(down+up)/2;

              }

       }

       return n;

}

 參考:http://www.2cto.com/kf/201206/137256.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM