解题思路
既然要求2½的值,可以首先确定的是值的范围在1~2之间,所以可以 确定区间为[1,2],如果mid>2½,令right=mid;,如果mid<2½,令left=mid,所以之间可以借助函数f(x)=x*x来实现。
代码 实现
//由于2½是无理数,所以只能获取近似值,这里不妨以精度1e-5为例
const double esp=1e-5;
double f(double x)
{
return x*x;
}
double calsqrt()
{
double l=1,right=2,mid;
while(right-left>esp)
{
mid=(left+right)/2;
if(f(mid)>2)
{
right=mid;
}
else if(f(mid<2)
{
left=mid;
}
}
return mid;
}
此题的解决思路可以用来解决一个特列:给定一个定义的区间[lL,R]上的单调函数,求方程f(x)=0的根
解决这个特列的代码实现
//以精度1e-5为例
const double esp=1e-5;
double f(double x)
{
return 。。。;
}
double calsqrt()
{
double l=1,right=2,mid;
while(right-left>esp)
{
mid=(left+right)/2;
if(f(mid)>2)
{
right=mid;
}
else if(f(mid<2)
{
left=mid;
}
}
return mid;
}