求用循环计算3的立方根精确到千分位

(初学Java者,正在学用循环语句,求解)

思路:
令 r 从 0 开始,逐步增长,直到 r * r * r >= 3 时……

img

使用二分法.
先定出区间的上下限, 对于实数 n, 设其立方根为 x,
若 n > 1, 则一定有 1 < x < n;
若 0 < n < 1, 则有 0 < x < 1;
对于 n = 3 的情况, low = 1, up = n;
然后取两者的平均值, ave = low + (up - low) / 2.0;
计算 ave 的立方, 若立方 < n, 则说明 ave < x < up, 于是, 下限变为 ave;
否则有 low < x < ave, 上限变为 ave;
根据大小关系, 缩小 (low, up) 的范围, 直到 up - low < 1e-4.

import java.util.Scanner;

class Major {
    public static void main(String[] argv) {
        Scanner scn = new Scanner(System.in);
        final double ER = 1e-4;
        boolean neg = false;
        double n = scn.nextDouble();
        if (0 > n) {
            neg = true;
            n = -n;
        }
        double up = n;
        double low = 1.0;
        if (n < 1) {
            up = 1.0;
            low = n;
        }
        double dis = 0;
        double ave = 0;
        while (ER < (dis = up - low)) {
            ave = low + dis / 2.0;
            if (ave * ave < n / ave) {
                low = ave;
            } else {
                up = ave;
            }
        }
        if (neg) {
            ave = -ave;
        }
        scn.close();
        System.out.println("Ans= " + ave);
    }
}