스털링 근사(계승 어림) 계산기
n! ≈ √(2πn)(n/e)ⁿ의 근사값과 참값, 상대오차를 나란히 보여 줍니다. 오차가 정말 1/(12n)인지 실제로 재어 확인하고, 보정항을 붙일 때마다 오차가 얼마나 떨어지는지도 함께 냅니다.
1부터 200,000까지 넣을 수 있습니다.
10! 의 스털링 근사 오차
0.829596%
1/(12n) = 0.833333%로 어림한 값과 견주면 0.9955배입니다. n이 커질수록 이 비가 1에 다가갑니다 — 오차가 정말 1/(12n)이라는 뜻입니다.
보정항을 붙이면
| 보정 | ln 근사 | 상대오차 |
|---|---|---|
| 없음 | 15.096082 | 8.30e-3 |
| + 1/(12n) | 15.104381 | 3.18e-5 |
| + 1/(288n²) | 15.104415 | 2.67e-6 |
| − 139/(51840n³) | 15.104413 | 1.50e-8 |
보정항을 한 개, 두 개 붙이면 오차가 각각 n²·n³에 반비례로 떨어집니다. 보정항은 로그 영역에서 더합니다 — 값을 만들어 곱하면 큰 n에서 넘치기 때문입니다.
값으로 보면
n을 키우면 오차가 어떻게 되나
| n | 상대오차 | × 12n |
|---|---|---|
| 1 | 7.786299% | 0.93436 |
| 2 | 4.049782% | 0.97195 |
| 5 | 1.650693% | 0.99042 |
| 10 | 0.829596% | 0.99552 |
| 50 | 0.166526% | 0.99915 |
| 100 | 0.083298% | 0.99958 |
| 1,000 | 0.008333% | 0.99996 |
| 10,000 | 0.000833% | 1 |
오른쪽 열이 상대오차에 12n을 곱한 값입니다. n이 커질수록 1에 다가가는 것이 「오차가 1/(12n)이다」라는 말의 뜻이고, 근사식이 맞다는 것을 근사식 밖에서 확인하는 방법입니다. n=1에서도 오차가 8%밖에 안 되는 것이 이 근사의 놀라운 점입니다.
계산 방법
- 1n을 넣습니다. 칩으로 5·10·100·170·171·10000을 바로 넣어 볼 수 있습니다.
- 2상대오차와 1/(12n) 어림을 견줍니다. 둘의 비가 1에 가까울수록 어림이 잘 맞는 것입니다.
- 3보정항 표에서 항을 하나씩 붙일 때마다 오차가 얼마나 떨어지는지 봅니다.
- 4n을 171로 바꿔 n! 자체는 넘치는데 ln(n!)은 멀쩡한 것을 확인합니다.
- 5맨 아래 표에서 「× 12n」 열이 1에 다가가는 것을 봅니다.
자주 묻는 질문
n! ≈ √(2πn)·(n/e)ⁿ으로 계승을 어림하는 식입니다. 계승은 곱셈을 n번 해야 하지만 이 식은 지수와 제곱근 한 번이면 끝나고, n이 커질수록 오히려 정확해집니다. 확률·통계·통계역학에서 큰 계승을 다뤄야 할 때 거의 언제나 이 식을 씁니다.
상대오차가 대략 1/(12n)입니다. n=10이면 0.83%, n=100이면 0.083%, n=1000이면 0.0083%로 자릿수가 그대로 따라 내려갑니다. 놀라운 것은 n=1에서도 오차가 8%밖에 안 된다는 점입니다. 이 계산기는 실제로 잰 오차에 12n을 곱해 1에 다가가는지 보여 주므로, 어림이 맞는지를 눈으로 확인할 수 있습니다.
참값과 근사값의 비가 1 + 1/(12n) + 1/(288n²) − 139/(51840n³) − …로 전개됩니다. 여기서 항을 하나씩 더 붙이면 오차가 각각 n²·n³에 반비례로 떨어집니다. n=10에서 재어 보면 보정 없이 8.3×10⁻³, 한 개 붙여 3.2×10⁻⁵, 두 개 붙여 2.7×10⁻⁶, 세 개 붙여 1.5×10⁻⁸입니다.
171!부터는 배정밀도 실수로 담을 수 없기 때문입니다. 약 1.8×10³⁰⁸를 넘어 Infinity가 됩니다. 그런데 ln(171!)은 711밖에 안 됩니다. 그래서 계승이 들어가는 계산은 거의 언제나 로그 영역에서 합니다. 나눗셈이 뺄셈으로 바뀌므로 이항계수 C(n,k) 같은 것도 큰 수를 아예 만들지 않고 계산할 수 있습니다.
늘 작습니다. 보정항의 앞쪽이 모두 양수라 참값이 근사값보다 크고, 근사값은 아래에서 다가갑니다. 그래서 스털링 값을 그대로 쓰면 계승을 과소평가하게 되며, 정확도가 필요하면 보정항을 붙여야 합니다.
스털링 근사는 감마함수의 점근 전개에서 나옵니다. Γ(n+1) = n!이므로 실수 x에 대한 Γ(x)에도 같은 꼴의 근사가 성립하고, 실제 수치 라이브러리의 lnΓ 구현(란초스 근사 등)도 큰 인자에서는 이 전개로 넘어갑니다.
전송되지 않습니다. 모든 계산이 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- 참값은 두 가지로 둡니다. 400 이하는 BigInt로 계승을 정확히 구하고, 그보다 크면 ln(n!) = Σ ln k를 보정 덧셈(Neumaier)으로 더해 씁니다. 로그를 수십만 번 그냥 더하면 오차가 쌓여 근사식의 오차와 뒤섞이므로, 정답지가 더 정확해야 근사식의 오차를 잴 수 있습니다. 실제로 보정 덧셈이 그냥 더하기보다 정확한지도 테스트로 확인했습니다.
- 두 정답지가 서로 맞는지도 대조합니다. BigInt로 구한 n!의 로그와 로그 합이 같은지, 로그로 센 자릿수가 BigInt 문자열의 길이와 같은지를 확인했습니다. 100!이 158자리인 것이 그 예입니다.
- 「오차가 1/(12n)이다」를 근사식 밖에서 확인합니다. 실제로 잰 오차에 12n을 곱한 값이 n을 키울수록 1에 다가가는지 보고, n=10,000에서 1과의 차이가 10⁻⁴ 아래인 것을 확인했습니다.
- 보정항의 효과도 값으로 박았습니다. n=10에서 8.3×10⁻³ → 3.2×10⁻⁵ → 2.7×10⁻⁶ → 1.5×10⁻⁸로 떨어지는 것과, 보정 한 개짜리의 오차가 n²에 반비례로 주는 것을 확인했습니다.
- 170!은 배정밀도로 담기고 171!은 Infinity가 되는 경계도 테스트에 넣었습니다.
- 보정항은 값을 만들어 곱하지 않고 로그 영역에서 더합니다. 곱해서 더하면 큰 n에서 넘칩니다.
- n은 200,000까지 다룹니다. 참값을 로그 합으로 구하므로 그보다 크면 화면에서 즉시 끝나지 않습니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.