JavaScript / Math.log·log10·log2로 로그 계산하기

Math.log(x)는 자연로그(밑이 e), Math.log10(x)은 밑이 10, Math.log2(x)는 밑이 2인 로그를 반환합니다. 세 함수 모두 양수 x에 사용합니다. 원하는 밑 b의 로그는 Math.log(x) / Math.log(b)로 계산할 수 있습니다.

세 메서드의 밑과 예제

자연로그의 밑 e는 Math.E입니다. Math.log10(100)은 10을 두 번 곱해 100이므로 2이고, Math.log2(16)은 2를 네 번 곱해 16이므로 4입니다. JavaScript 이름은 대소문자를 구별하므로 Math.Log2()가 아니라 Math.log2()를 사용해야 합니다.

console.log(Math.log(Math.E)); // 1
console.log(Math.log10(100)); // 2
console.log(Math.log2(16)); // 4

관련 정의는 MDN의 Math.log(), Math.log10(), Math.log2() 문서에서 확인할 수 있습니다.

정의역과 다른 밑으로 계산하기

로그를 구할 수 x는 0보다 커야 합니다. 0을 전달하면 -Infinity, 음수를 전달하면 NaN입니다. 임의의 밑 b는 0보다 크고 1이 아니어야 하며, Math.log(x) / Math.log(b)를 사용합니다.

console.log(Math.log(0)); // -Infinity
console.log(Math.log(-1)); // NaN
console.log(Math.log(64) / Math.log(4)); // 3
console.log(Math.log(81) / Math.log(3)); // 4

밑을 1로 두면 분모 Math.log(1)이 0이므로 로그의 밑으로 사용할 수 없습니다. 컴퓨터의 로그 계산은 부동소수점 근삿값이므로 어떤 입력에서는 수학적으로 정수인 결과도 근처의 소수로 표시될 수 있습니다. 정확한 정수 여부를 판정하는 용도로 결과를 바로 비교할 때는 오차를 고려해야 합니다.

전체 예제: 값과 밑을 직접 바꿔 비교

다음 코드를 math-log.html로 저장해 브라우저에서 엽니다. 0보다 큰 수와 추가 밑을 입력하면 세 기본 로그와 밑변환 결과를 표시합니다. 화면에는 읽기 편하도록 유효 숫자 12자리로 표시하며, 실제 계산에 쓴 값을 바꾸지는 않습니다.

<!doctype html>
<html lang="ko">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>로그 함수 비교</title>
</head>
<body>
<label for="number">로그를 구할 수</label>
<input id="number" type="number" step="any" value="64">
<label for="base">추가로 비교할 밑</label>
<input id="base" type="number" step="any" value="4">
<button id="calculate" type="button">계산</button>
<pre id="result" aria-live="polite"></pre>
<script>
const input = document.querySelector('#number');
const baseInput = document.querySelector('#base');
const result = document.querySelector('#result');

function show() {
  const numberText = input.value.trim();
  const baseText = baseInput.value.trim();
  const value = Number(numberText);
  const base = Number(baseText);
  if (!numberText || !baseText || !Number.isFinite(value) || !Number.isFinite(base) ||
      value <= 0 || base <= 0 || base === 1) {
    result.textContent = '수는 0보다 커야 하고 밑은 0보다 크면서 1이 아니어야 합니다.';
    return;
  }
  const format = number => Number(number.toPrecision(12));
  result.textContent = [
    `자연로그: ${format(Math.log(value))}`,
    `밑 10: ${format(Math.log10(value))}`,
    `밑 2: ${format(Math.log2(value))}`,
    `밑 ${base}: ${format(Math.log(value) / Math.log(base))}`
  ].join('\n');
}

document.querySelector('#calculate').addEventListener('click', show);
show();
</script>
</body>
</html>

기본값 64와 밑 4에서는 마지막 줄이 3입니다. 수를 81, 밑을 3으로 바꾸면 마지막 줄은 4입니다. 수를 0이나 음수로 바꾸거나 밑을 1로 바꾸면 결과 대신 입력 조건이 표시됩니다. 보안이나 금액처럼 정확한 십진 결과가 필요한 작업에 부동소수점 근삿값을 그대로 사용하지 마세요.