浮点数二分

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

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

# 三、代码实战

# AcWing 0790


题目:数的三次方根

给定一个浮点数 nn,求它的三次方根。

输入格式

共一行,包含一个浮点数 nn

输出格式

共一行,包含一个浮点数,表示问题的解。

注意,结果保留 66 位小数。

数据范围

10000n10000-10000 \le n \le 10000

输入样例:

1000.00

输出样例:

10.000000

解答代码:

    Last Updated: 2023-01-28 4:31:25