基础算法——浮点数二分
先介绍下,整数的二分
二分是不断缩小划分的区间,直到左端点等于右端点
while(l<r){int mid = l+r>>1; if(mid<target) left =mid; else right = mid -1}
那么对于浮点数的二分,我们如何去判断两个浮点数是相等的呢?
我们可以对左右两个端点作差,差值小于一个很小的浮点数,我们可以视为相等故代码如下
int main()
{
const double eps = 1e-8;
double x; //用于比较的目标值
double left = 0,right=10000;
//注意,这里当相差的差值大于eps时视为不相等
while(right-left>eps){
double mid = (left+right)/2;
if(x<mid){
right=mid;
}else{
left=mid;
}
}
printf("%lf",left);
}