Acwing 790. 数的三次方根(浮点二分)
给定一个浮点数n,求它的三次方根。
输入格式
共一行,包含一个浮点数n。
输出格式
共一行,包含一个浮点数,表示问题的解。
注意,结果保留6位小数。
数据范围
−10000≤n≤10000
输入样例:
1000.00
输出样例:
10.000000
题解
#include <iostream>
#include <algorithm>
#include <cstdio>
#define eps 1e-8//设置精度值,六位小数1e-8,四位小数1e-6(大概)
using namespace std;
double n, res, l = -10000, r = 10000;
double f(double x){
return x * x * x;
}
int main(){
cin >> n;
while(l + eps < r){
double mid = (l + r) / 2;
if (f(mid) >= n) r = mid;//找的是n,所以是mid和n的关系
else l = mid;
}
printf("%.6lf", l);
return 0;
}
if (f(mid) >= n) r = mid;//找的是n,所以是mid和n的关系
这句话非常重要!!
浮点二分比整数二分少考虑了边界问题,多了一个精度问题,简单多了啊