JavaScript에는 n제곱근을 바로 구해 주는 내장 함수가 없습니다. 대신 Math.pow() 메서드에 지수로 1/n을 전달하면 원하는 n제곱근을 계산할 수 있으며, 부호 처리를 위해 Math.abs() 메서드를 함께 활용합니다.
n제곱근은 수학적으로 다음과 같이 표현됩니다.
x1/n
예를 들어 36의 2제곱근(제곱근)은 6, 49의 2제곱근은 7입니다.
예제
다음 예제는 n제곱근을 계산하는 함수 displayRoot()를 정의하고, 여러 숫자에 대해 결과를 출력합니다.
<html>
<head>
<title>Calculate root</title>
</head>
<body>
<script>
function displayRoot(x, num) {
val = num % 2;
if((val == 1) || x < 0)
x = -x;
var a, num;
a = Math.pow(x, 1 / num);
num = Math.pow(a, num);
if(Math.abs(x - num) < 1 && (x > 0 === num > 0))
return val ? -a : a;
}
document.write(displayRoot(36, 2));
document.write("<br>"+displayRoot(49, 2));
document.write("<br>"+displayRoot(36, -2));
document.write("<br>"+displayRoot(216, -2));
</script>
</body>
</html>
출력 결과
6 7 0.16666666666666666 0.06804138174397717
코드 설명
함수가 동작하는 과정을 단계별로 살펴보면 다음과 같습니다.
- 루트 차수 판별:
num % 2로 루트의 차수(num)가 홀수인지 확인합니다. 차수가 홀수이거나 입력값 x가 음수이면 계산 전에 부호를 임시로 반전시킵니다. - n제곱근 계산:
Math.pow(x, 1 / num)을 사용해 x의 num 제곱근을 구합니다. - 결과 검증: 구한 값을 다시 num 거듭제곱했을 때 원래 값과의 오차가
Math.abs()기준 1 미만이고, 두 값의 부호가 일치하는 경우에만 유효한 결과로 판단합니다. - 부호 복원: 홀수 차수의 루트라면 음수 결과를 반환하고, 그렇지 않으면 양수 값을 그대로 반환합니다.
참고로 지수에 음수(-2)를 전달하면 역수 형태의 값, 즉 x-1/n이 계산됩니다. 위 예제에서 36의 -2제곱근이 1/6 ≈ 0.1667로 출력되는 이유입니다.