开根案例

public class SqrtDemo {

    public static void main(String[] args) {
        sqrtNewton(2, 0.00000001);
//        squareRoot(2, 0.00000001);
    }

    /**
     * 牛顿开根法
     *
     * @param i   根
     * @param gap 精度
     */
    private static void sqrtNewton(double i, double gap) {
        double value = i / 2;
        double gapNow;
        int count = 0;
        do {
            value = (value + i / value) / 2;
            gapNow = value * value - i;
            count++;
        } while (gapNow > gap);
        System.out.println("value: " + value);
        System.out.println("count: " + count);
    }

    /**
     * 二分法开根
     *
     * @param i   根
     * @param gap 精度
     */
    private static void sqrtRoot(double i, double gap) {
        double start = 0;
        double end = i;
        double gapNow;
        int count = 0;
        do {
            double value = (start + end) / 2;
            double temp = value * value;
            if (temp > i) {
                end = value;
            } else {
                start = value;
            }
            gapNow = end - start;
            count++;
        } while (gapNow > gap);
        System.out.println("value: " + (start + end) / 2);
        System.out.println("count: " + count);
    }
}

 

posted @ 2021-11-24 14:29  c3p4501  阅读(48)  评论(0)    收藏  举报