sqart平方根計算的兩種方法實現(累加逼近和二分法)
阿新 • • 發佈:2019-01-27
sqart函式是c/c++數學計算的一個常用函式,sqart開方的主要思路是利用逼近的方法進行實現,精度最低,計算效率最低的方式是直接累加逼近;精度較高而且使用範圍較廣的方法是牛頓迭代法;精度最高,而且具有最大效率的方法則是二分法。
首先介紹的是直接使用累加進行逼近,這裡需要設定一個閾值,我設定的閾值為0.001,對於較小的被開方數,累加進行逼近是可以接受的,但是對於較大的被開方數,這種方法不具任何意義。累加逼近的程式碼如下:
對於二分法計算平方根,需要先確定被開方數與1的大小關係,被開方數大於1,開方的值小於被開方數;被開方數小於1,開方的結果大於被開方數;如下是二分法計算開方的程式碼:#define limits 0.001 void mysqrt(double num) { double i=0.0; while((num-i*i>limits)) { i+=0.001; } printf("%f",i); printf("\n"); }
<span style="font-size:18px;color:#006600;">/*二分法實現*/ void mysqrt1(double num) { double low=0.0,high=0.0; double result=0.0; int counts=0; result=(low+high)/2.0; if(num<1) high=1; else high=num; while((abs(num-result*result)>accuracy)&&counts<100) { if(result*result<num) low=result; else high=result; result=(high+low)/2.0; counts++; } printf("%f",result); printf("\n"); printf("%d",counts); }</span>