1. 程式人生 > >sqart平方根計算的兩種方法實現(累加逼近和二分法)

sqart平方根計算的兩種方法實現(累加逼近和二分法)

       sqart函式是c/c++數學計算的一個常用函式,sqart開方的主要思路是利用逼近的方法進行實現,精度最低,計算效率最低的方式是直接累加逼近;精度較高而且使用範圍較廣的方法是牛頓迭代法;精度最高,而且具有最大效率的方法則是二分法。

      首先介紹的是直接使用累加進行逼近,這裡需要設定一個閾值,我設定的閾值為0.001,對於較小的被開方數,累加進行逼近是可以接受的,但是對於較大的被開方數,這種方法不具任何意義。累加逼近的程式碼如下:

#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");
}
       對於二分法計算平方根,需要先確定被開方數與1的大小關係,被開方數大於1,開方的值小於被開方數;被開方數小於1,開方的結果大於被開方數;如下是二分法計算開方的程式碼:
<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>