二分法对非负数开根

public class MySqrt {
    public static double sqrt(double n) {
        if (n == 0) {
            return 0;
        }
        double max;
        if (n >= 1) {
            max = n;
        } else {
            max = 1;
        }
        double min = 0.0;
        double p = 1e-9;
        double mid = (max + min) / 2.0;
        while(Math.abs(mid * mid - n) > p) {
            if(mid * mid < n) {
                min = mid;
            } else if(mid * mid > n) {
                max = mid;
            } else {
                return mid;
            }
            mid = (max + min) / 2.0;
        }
        return mid;
    }

    public static void main(String[] args) {
        System.out.println(sqrt(0));
        System.out.println(sqrt(0.16));
        System.out.println(sqrt(0.25));
        System.out.println(sqrt(0.81));
        System.out.println(sqrt(1));
        System.out.println(sqrt(25));
    }
}

输出:

0.0
0.40000000037252903
0.5
0.900000000372529
0.9999999995343387
4.99999999992724
发布了54 篇原创文章 · 获赞 120 · 访问量 9587

猜你喜欢

转载自blog.csdn.net/siriusol/article/details/105130743