算法分析
浮点数的二分主要在于精度的控制,利用二分法确定边界,左右两个端点的差值小于给定的 eps
从而确定精度差,确定退出 while
循环的条件,注意右端点一定要 >1
,否则会出现 [0,0.001]
实际三次方根为0.1
模板
bool check(double x) {/* ... */} // 检查x是否满足某种性质
double bsearch_3(double l, double r)
{
const double eps = 1e-6; // eps 表示精度,取决于题目对精度的要求
while (r - l > eps)
{
double mid = (l + r) / 2;
if (check(mid)) r = mid;
else l = mid;
}
return l;
}
完整代码
#include<iostream>
using namespace std;
const double eps = 1e-6;
int main()
{
double n;
cin>>n;
double l = -10000, r = 10000, mid;
while( r-l > eps){
mid = (l+r)/2;
if(mid * mid * mid >= n) r = mid;
else l = mid;
}
printf("%.6lf",l);
return 0;
}