이 글에서는 숫자의 n제곱근(n번째 근)을 계산하여 그 결과를 반환하는 JavaScript 함수를 작성하는 방법을 알아봅니다.
n제곱근 계산의 핵심 원리
수학적으로 어떤 수 m의 n제곱근은 m^(1/n)으로 표현할 수 있습니다. JavaScript에서는 내장 함수인 Math.pow()를 활용해 손쉽게 구현할 수 있습니다.
다만 몇 가지 주의할 점이 있습니다.
- 음수의 짝수 제곱근은 실수 범위에서 존재하지 않습니다.
- 음수의 홀수 제곱근은 존재하므로, 이 경우 부호를 별도로 처리해야 합니다.
- 부동소수점 연산 특성상 결과에 미세한 오차가 발생할 수 있으므로, 결과값을 다시 n제곱하여 원래 값과 비교하는 검증 과정을 거치는 것이 좋습니다.
구현 예제 코드
다음은 위 로직을 반영한 JavaScript 코드입니다.
const findNthRoot = (m, n) => {
try {
// 홀수 제곱근이면서 입력값이 음수일 경우 부호 처리
let negate = n % 2 == 1 && m < 0;
if(negate)
m = -m;
// m의 n제곱근 계산
let possible = Math.pow(m, 1 / n);
// 결과 검증: 다시 n제곱했을 때 원래 값과 일치하는지 확인
n = Math.pow(possible, n);
if(Math.abs(m - n) < 1 && (m > 0 == n > 0))
return negate ? -possible : possible;
} catch(e){
return null;
}
};
console.log(findNthRoot(45, 6));코드 설명
- 부호 처리: n이 홀수이고 m이 음수라면, 우선 m의 절댓값에 대해 계산한 뒤 최종 결과에 음수 부호를 붙입니다.
- 제곱근 계산:
Math.pow(m, 1 / n)를 사용하여 m의 n제곱근을 구합니다. - 결과 검증: 계산된 값을 다시 n제곱하여 원래 값과의 차이가 1 미만인지 확인함으로써 유효한 결과인지 판별합니다.
- 예외 처리: 계산 도중 오류가 발생하면
null을 반환합니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
1.8859727740585395
즉, 45의 6제곱근은 약 1.886임을 확인할 수 있습니다. 실제로 1.8859727740585395를 6제곱하면 약 45가 되어 올바른 결과임을 알 수 있습니다.