$\Huge\color{orchid}{点击此处获取更多干货}$
二分查找
实数型二分查找跟整数型稍有差别,具体如下:
1. 要确定查找精度,否则单纯的按照$low<high$来查找的话会近乎无尽的查找
2. 不管移动哪个索引,都是直接移动到中点处
这个问题其实比上一个简单很多,因为单调性只是二元性的特殊情况,对于一个单调函数$f$可能取到的某一个值$y$来说,条件$f(x) \le y$中$x$的分布特征就变成了二元性,唯一需要注意的只有输出,C语言输出时需要在$\%$后面加上$.n$来表示小数点后输出的位数,而C++语言输出时还可以用<iomanip>头文件里的fixed和setprecision(n)控制小数点后的位数
C++ 代码
#include <iostream>
#include <iomanip>
using namespace std;
const double _BOTTOM = -22.0, _TOP = 22.0, DVV = 1e-8;//DVV代表分度值,也就是精度
int main() {
double x;
cin >> x;//scanf输入时无差别
double low = _BOTTOM, high = _TOP;
while(high - low >= DVV) {
double mid = (low + high) / 2;
//红色位于哪一侧就移动哪一侧索引,直接移动到中点
if(mid * mid * mid >= x) {
high = mid;
}
else {
low = mid;
}
}
//printf输出时要用"%.6lf"输出
cout << fixed << setprecision(6) << low << endl;
return 0;
}