高分悬赏:Java语言不用math库,怎么对一个数字进行开平方,要求精确到0.00001

高分悬赏:Java语言不用math库,怎么对一个数字进行开平方,要求精确到0.00001

package com.szs;

public class Main {
    public static void main(String[] args) {    
        //手写二分估值
        System.out.println(myCalculate(1.4,1.4,1.5));
        //调用函数输出
        System.out.println("----------sqrt= "+Math.sqrt(2.0));
    }
    //根号2约等于 1.414
    private static double myCalculate(double ans,double low,double high) {
        double mid = 0;
        // 二分法,结束条件:差值小于等于1e-10即可
        while(high-low>1e-10){

             mid = (high+low)/2.0;
            System.out.println("-----------mid= "+mid+"  mid*mid= "+mid*mid);
            //二分,逐步向中间值收拢
            if(mid*mid <= 2.0){
                low=mid;
            }
            else{
                high=mid;
            }

        }

        return mid;
    }

}


采用二分法求解
public class Main {
public static void main(String[] args) {

    System.out.println(calSqrt(2.0,0.00001));
    System.out.println("sqrt= "+Math.sqrt(2.0));
}

private static double calSqrt(double x, double epsilon) {
    double mid =0;
    double low=0;
    double high=x;
    double r =x;
    System.out.println("r= "+r);
    while(r > epsilon){
        mid = low + (high-low)/2;
        r = mid*mid -x;
        r = r > 0? r: -r;           
        if(mid*mid < x){
            low=mid;
        }
        else{
            high=mid;
        }
        System.out.println("r= "+r);
    }

    return mid;
}

}
欢迎关注我的CSDN博客
,您的关注是对我最大鼓励!

牛顿迭代法
了解下

JAva类Math.sqrt