浮点数二分
睡不醒的鲤鱼 2021-09-29 常用算法 二分法
# 一、算法思想
相比于 整数二分,浮点数二分由于不存在整除操作,每次都可以将区间长度严格缩小一半,所以处理起来会比较简单。
只要保证每次选取的区间都包含最终的答案即可,当划分的区间足够小时,就认为找到了答案。
# 二、算法模板
C++
double bsearch(double l, double r)
{
const double eps = 1e-6; // eps 表示精度,取决于题目对精度的要求
while (r - l > eps) {
double mid = l + (r - l) / 2;
if (check(mid)) r = mid;
else l = mid;
}
return l;
}
// 检查 x 是否满足某种性质
bool check(double x) {/* ... */}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
Go
func binarySearch(l, r float64) float64 {
const eps = 1e-8
for r-l > eps {
mid := l + (r-l)/2
if checkFloat(mid) {
l = mid
} else {
r = mid
}
}
return l
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 三、代码实战
# AcWing 0790
题目:数的三次方根
给定一个浮点数 ,求它的三次方根。
输入格式
共一行,包含一个浮点数 。
输出格式
共一行,包含一个浮点数,表示问题的解。
注意,结果保留 位小数。
数据范围
输入样例:
1000.00
输出样例:
10.000000
解答代码: