Java/Simple code

Java Math.sqrt 없이 제곱근 구하기 (바빌로니아 법)

검은고양이개발자 2023. 1. 26. 10:35
반응형

 

      int num = 1919299;
        double n = 1;
        while(true){
            if(n*n==num){
                n=n;
            }
            else if(n*n>num){
                n -= 1;
                break;
            }
            n++;
        }
//        int count=0;
//        double guess = num;
//        String result="";
//        while (true){
//            count++;
//            if(count==200){
//                result=String.format("%.2f",guess);
//                break;
//            }
//            guess = (guess + (num/guess))/2;
//        }
        int count=0;
        double guess = n;
        String result="";
        while (true){
            count++;
            if(count==200){
                result=String.format("%.2f",guess);
                break;
            }
            guess = (guess + (num/guess))/2;
        }



        System.out.println(result);
        System.out.println(Math.sqrt(num));

    }
}
//출력
1385.39
1385.3876713757777

 

아래 공식은 바빌로니아 법을 이용해 제곱근을 구하는 식이다

 

 

 

이를 guess = (guess + (num/guess))/2; 를 통해 구현할 수 있고

이 작업을 여러 번 반복하면 guess 값은 제곱근 근삿값에 도달할 수 있다.

 

이 공식을 적용하기 전에 guess에 num의 제곱근 근사값을 찾아 넣으면 되며,

바빌로니아 공식을 여러번 적용할 경우에는

guess에 num의 제곱근 근삿값을 넣을 필요 없이

guess에 그냥 num의 값을 넣어도 똑같이 제곱근 근삿값을 얻을 수 있다.

 

   int count=0;
        double guess = num;    // (guess 에 num 넣음)
        String result="";
        while (true){
            count++;
            if(count==200){
                result=String.format("%.2f",guess);
                break;
            }
            guess = (guess + (num/guess))/2;
        }
//        int count=0;
//        double guess = n;        //(guess 에 num의 제곱근 근사값을 넣음)
//        String result="";
//        while (true){
//            count++;
//            if(count==200){
//                result=String.format("%.2f",guess);
//                break;
//            }
//            guess = (guess + (num/guess))/2;
//        }
        System.out.println(result);
        System.out.println(Math.sqrt(num));

    }
}
//출력
1385.39
1385.3876713757777

 

반응형