java实现开根号算法

Posted -1007813544

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java实现开根号算法相关的知识,希望对你有一定的参考价值。

    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        double target=9876543212345d;
        double result =sqrt(target);
        System.out.println("sqrt耗时:"+(System.currentTimeMillis()-start)+",result:"+result);
        
        start=System.currentTimeMillis();
        result =SqrtByBisection(target, 0);
        System.out.println("SqrtByBisection耗时:"+(System.currentTimeMillis()-start)+",result:"+result);
        
        start=System.currentTimeMillis();
        result = SqrtByNewton(target, 0);
        System.out.println("SqrtByNewton耗时:"+(System.currentTimeMillis()-start)+",result:"+result);

    }
    
    //牛顿迭代法
    public static double SqrtByNewton(double target,double eps){
        double Xa=target,Xb;
        do {
            Xb = Xa;
            Xa = (Xa+target/Xa)/2;
        } while (fabsf(Xa,Xb)>eps);
        return Xa;
    }

    //二分法  精度是指两次mid值的差值
    public static double SqrtByBisection(double target,double eps){
        double min=1,max=target;
        double mid =(min+max)/2;
        double anMid;
        do {
            if(mid*mid>target){
                max=mid;
            }else{
                min=mid;
            }
            anMid=mid;
            mid=(max+min)/2;
        } while (fabsf(anMid,mid)>eps);
        return mid;
    }
    
    
    public static double sqrt(double d){
        double a = 0.1;
        double x1,x2=0;
        while (a*a<=d) {
            a+=0.1;
        }
         x1=a;
        for (int i = 0; i < 10; i++) {
            x2=d;
            x2/=x1;//x2 = x2/x1;
            x2+=x1;
            x2/=2;
            x1=x2;
        }
        return x2;
    }
    
    public static double fabsf(double a,double b){
        if(a>b){
            return a-b;
        }else
            return b-a;
    }

 

以上是关于java实现开根号算法的主要内容,如果未能解决你的问题,请参考以下文章

如何用CORDIC的FPGA算法计算平方和开根号

Java-求根号n

FPGA教程案例18通过ROM开发低延迟开根号计算

如何开根号 编程实现

二分和牛顿法实现开根号

迭代法与开根号求值(letcode 69)