相较于整数二分,浮点数二分非常简单,不需要考虑边界问题,因为可以无限细分,只需要考虑精度即可

    举个例子:

    AcWing 790. 数的三次方根 数学 二分

    给定一个浮点数 n,求它的三次方根。
    输入格式
    共一行,包含一个浮点数 n。
    输出格式
    共一行,包含一个浮点数,表示问题的解。
    注意,结果保留 6 位小数。
    数据范围
    −10000≤n≤10000
    输入样例:

    1. 1000.00

    输出样例:

    1. 10.000000

    上代码:

    1. import java.util.*;
    2. public class Main {
    3. public static void main(String[] args) {
    4. double x = new Scanner(System.in).nextDouble();
    5. boolean flag = x > 0 ? true: false;
    6. x = x > 0 ? x : -x;
    7. double l = 0, r = Math.max(1, x);
    8. while (r - l > 1e-8) {
    9. double mid = (l + r) / 2;
    10. if (mid*mid*mid > x) {
    11. r = mid;
    12. }
    13. else {
    14. l = mid;
    15. }
    16. }
    17. l = flag ? l : -l;
    18. System.out.printf("%.6f", l);
    19. }
    20. }

    注意:

    • 正数和负数的不同处理
    • 大于1和小于1的不同处理