原题链接
二分模板总结
题目描述
给定一个浮点数n,求它的三次方根,结果保留六位小数
数据范围:
−10000≤n≤10000
题目分析
道理上来说,可以从小到大枚举😂😂。但是这些数都是从小到大有序地排好队的,我们就可以用二分了。区别于整数二分,这个是浮点数二分
#include<iostream>
using namespace std;
double n;
int main()
{
cin>>n;
double l=-10000, r=10000;
//保留六位的话,取-8, 保留4位的话,取-6
while(r-l>1e-8)
{
double mid=(l+r)/2;
// 寻找满足x^3>=n最小的数,也就是尽可能往左。
// 所以用第一个模板
if(mid*mid*mid>=n) r=mid;
// 按理来说,这里应该是l=mid+1的。
// 但是,因为这儿是浮点数,所以不能+1,-1了,
// 不然很容易造成误差,要加或减去一个很小的数才行。
// 比如加上1e-8,或者不加,都是对的。
else l=mid;
// else l=mid+1e-8;
}
printf("%.6lf\n", l);
}