바빌론 방법(Babylonian Method)은 비선형 방정식을 풀기 위한 뉴턴-랩슨(Newton-Raphson) 방법에 기반한 수치 해석 기법 중 하나로, 제곱근을 계산할 때 사용됩니다. 고대 바빌로니아 시대부터 유사한 방식으로 제곱근이 계산되었다고 알려져 있으며, 이 때문에 '바빌론 방법' 또는 '헤론의 방법(Heron's Method)'이라고도 불립니다.
핵심 아이디어는 매우 간단합니다. 임의의 값 x와 1을 초기 추정값으로 설정한 뒤, x와 y의 평균을 다음 근사치로 삼습니다. 이후 y 값을 number / x로 갱신하고, 이 과정을 반복합니다. x는 점점 작아지고 y는 점점 커지면서 두 값이 실제 제곱근으로 수렴하게 되는 원리입니다.
입력 및 출력
Input:
A number: 65
Output:
The square root of 65 is: 8.06226
알고리즘
sqRoot(number)
입력: 실수 형태의 숫자.
출력: 해당 숫자의 제곱근.
Begin
x := number
y := 1
precision := 0.000001
while 상대 오차(x, y) > precision, do
x := (x + y) / 2
y := number / x
done
return x
End
여기서 상대 오차는 |x − y| / |x|로 계산되며, 이 값이 허용 오차(예: 0.000001)보다 작아질 때까지 반복문이 실행됩니다. 즉, 결과값이 소수점 여섯 자리 수준까지 정확해질 때까지 근사를 계속하는 것입니다.
C++ 예제 코드
#include<iostream>
#include<cmath>
using namespace std;
float sqRoot(float number) {
float x = number, y = 1; // 초기 추정값: number와 1
float precision = 0.000001; // 결과 정확도: 소수점 6자리까지
while(abs(x - y)/abs(x) > precision) {
x = (x + y)/2;
y = number/x;
}
return x;
}
int main() {
int n;
cout << "Enter Number to find square root: "; cin >> n;
cout << "The square root of " << n <<" is: " << sqRoot(n);
}
실행 결과
Enter Number to find square root: 65
The square root of 65 is: 8.06226
이처럼 바빌론 방법은 복잡한 라이브러리 함수 없이도 단순한 사칙연산만으로 빠르게 제곱근의 근사값을 구할 수 있는 효율적인 알고리즘입니다. 특히 매 반복마다 유효 숫자의 개수가 거의 두 배씩 늘어나는 이차 수렴(quadratic convergence) 특성 덕분에 몇 번의 반복만으로도 매우 정확한 결과를 얻을 수 있습니다.