sqrt函数

来源:互联网 发布:淘宝vr 编辑:程序博客网 时间:2024/06/05 17:54
#define  eps 1e-9
double mySqrt(double a)
{
assert(a>=0);
double low=0,up=a;
double mid;
while (abs(up-low) >eps)
{
mid=(low+up)/2;
if (mid*mid>a)
{up=mid;
}
if (mid*mid<a)
{low=mid;
}
}
return mid;
}
double sqrtByNewton(double a)
{
double result=a;
while(abs(result*result-a)>eps)
{
result=(result+a/result)/2;
}
return result;
}//0x5f375a86
double newSqrt(double a)
{
double result=0x5f375a86;
while(abs(result*result-a)>eps)
{
result=(result+a/result)/2;
}
return result;
}//0x5f375a86
int main()
{
double a=65555.45;
clock_t start,end;
start=clock();
cout<<"sqrt:        "<<sqrt(a)<<"__";
end=clock();cout<<"total time is:"<< (double)(end - start)<<endl;


start=clock();
cout<<"mySqrt:      "<<mySqrt(a)<<"__";
end=clock();cout<<"total time is:"<<(double)(end - start)<<endl;


start=clock();
cout<<"sqrtByNewton:"<<sqrtByNewton(a)<<"__";
end=clock();cout<<"total time is:"<<(double)(end - start)<<endl;
start=clock();
cout<<"newSqrt:     "<<newSqrt(a)<<"__";
end=clock();cout<<"total time is:"<<(double)(end - start)<<endl;
system("pause");
return 0;

}

2分法,牛顿迭代法,以及优化初值的改良牛顿迭代法

0 0
原创粉丝点击