Java implements root number algorithm

    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;
    }

    // Bisection precision refers to the difference between two mid values 
    ​​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;
    }

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325172519&siteId=291194637