题目:EPI
int compare(double a,double b)
{
double diff=fabs(a-b);
if(diff<1.0/100000000.0)
return 0;
else
{
return a>b?1:-1;
}
}
double square_root(const double root)
{
if(compare(root,0)<0)
throw new exception("error");
double left,right;
if(compare(root,1)<0)//x>=0 && x<1
{
left=root;
right=1;
}
else //x>=1
{
left=1;
right=root;
}
while(compare(left,right)!=0)
{
double mid=left+(right-left)*0.5;
double mul=mid*mid;
int res=compare(mul,root);
if(res>0)
right=mid;
else if(res<0)
left=mid;
else
return mid;
}
return left;
}