큰 정수 정확한 계산기|BigInt로 자릿수 제한 없는 사칙연산・거듭제곱
자릿수가 매우 많은 거대한 정수끼리 오차 없이 정확하게 계산하는 무료 도구입니다. JavaScript의 BigInt를 사용해 9,007,199,254,740,991(2의 53제곱−1)을 넘는 정수에서도 덧셈・뺄셈・곱셈・정수 나눗셈(몫과 나머지)・거듭제곱을 정확하게 계산할 수 있습니다.
2의 53제곱을 넘으면 오차가 생기는 이유
일반 계산기나 JavaScript의 숫자 형식(Number)은 2의 53제곱(Number.MAX_SAFE_INTEGER)을 넘으면 인접한 정수를 구분할 수 없게 됩니다. BigInt를 사용하면 이 한계를 넘어서도 정확하게 계산할 수 있습니다.
| Number.MAX_SAFE_INTEGER | 9,007,199,254,740,991(253 − 1) |
|---|---|
| 9007199254740992 + 1 | Number: 9007199254740992 (오류) / BigInt: 9007199254740993 (정확) |
큰 정수의 정확한 계산이란
보통의 계산기나 프로그래밍 언어의 수치 자료형(자바스크립트의 Number 등)은 2의 53제곱−1(9,007,199,254,740,991)을 넘는 정수를 정확히 다루지 못해, 자릿수가 커질수록 반올림 오차가 생깁니다. 큰 정수의 정확한 계산이란 이 한계를 넘어 몇 자리든 오차 없이 사칙연산과 거듭제곱을 수행하는 일입니다.
이 도구는 자바스크립트의 BigInt 자료형을 사용해 계산하므로 자릿수에 사실상 상한이 없어, 암호나 알고리즘 대회에서 다루는 수백 자리의 정수라도 엄밀한 결과를 돌려 드립니다. 정수 나눗셈에서는 몫과 나머지를 동시에 표시하고, 거듭제곱은 거대한 결과가 되기 쉬우므로 지수에 안전한 상한을 두었습니다.
큰 정수 계산기 사용 방법
- 첫 번째 정수(A)를 입력합니다 계산하고 싶은 정수를 입력합니다. 자릿수 구분 쉼표가 포함되어 있어도 자동으로 제거됩니다.
- 연산자를 고릅니다 덧셈·뺄셈·곱셈·정수 나눗셈(몫과 나머지)·거듭제곱 중에서 하고 싶은 연산을 고릅니다.
- 두 번째 정수(B)를 입력합니다 연산에 필요한 다른 한쪽의 정수를 입력합니다. 거듭제곱의 경우 B가 지수가 됩니다.
- 결과를 확인합니다 입력에 따라 결과와 자릿수가 실시간으로 표시됩니다. 정수 나눗셈의 경우 몫과 나머지가 모두 표시됩니다.
더 잘 활용하기 위한 팁
- 일반 계산기나 스프레드시트의 숫자 형식은 2의 53제곱(약 900조)을 넘으면 오차가 발생하지만, 이 도구는 BigInt를 사용해 자릿수 제한 없이 정확하게 계산합니다.
- 정수 나눗셈(÷)에서는 몫뿐 아니라 나머지도 함께 표시되므로, 암호학이나 해시 계산에서 사용하는 나머지 연산(모듈로)을 검산할 때도 편리합니다.
- 거듭제곱의 지수가 너무 크면 브라우저가 응답하지 않을 수 있어 안전을 위해 지수를 100만까지로 제한하고 있습니다.
- 입력란에 천 단위 구분 쉼표(예:
1,234,567)가 포함되어 있어도 계산 전에 자동으로 제거되므로, 구분 기호가 붙은 숫자를 그대로 붙여넣을 수 있습니다. - "예시 입력" 버튼을 누르면 2의 53제곱을 넘는 거대한 정수 계산 예시가 자동으로 입력되어, 일반 계산기와의 차이를 바로 확인할 수 있습니다.
큰 정수 계산기의 활용 사례
암호 알고리즘의 검산
RSA 암호의 키 생성처럼 수백~수천 자리의 정수 연산을 수반하는 암호 기술의 학습·검산에 쓰실 수 있습니다.
알고리즘 대회의 답 맞추기
큰 계승이나 피보나치 수열의 먼 항처럼 다중 정밀도 정수를 다루는 문제의 예상 답을 빠르게 검산하실 수 있습니다.
거대한 수치 데이터의 오차 확인
스프레드시트나 보통의 계산기로 계산한 결과가 2의 53제곱을 넘어 오차가 났는지를, 정확한 값과 맞추어 확인하실 수 있습니다.
수학 자유 연구·학습
자릿수가 많은 수의 거듭제곱이나 나머지가 어떻게 늘어나는지를, 실제 수치로 확인하면서 배우실 수 있습니다.
큰 정수 계산에 관한 용어집
- BigInt
- 자바스크립트에서 자릿수에 상한이 없는 정수를 정확히 다루기 위한 자료형입니다. 보통의 Number형과 달리 2의 53제곱을 넘는 정수도 오차 없이 계산할 수 있습니다.
- 다중 정밀도 정수(bignum)
- 컴퓨터가 기본으로 다룰 수 있는 정수의 범위를 넘어, 자릿수에 제한이 없는 정수를 표현하는 구조입니다. 내부적으로는 많은 자릿수를 배열처럼 관리해 계산합니다.
- Number.MAX_SAFE_INTEGER
- 자바스크립트의 Number형이 오차 없이 안전하게 다룰 수 있는 최대 정수(2의 53제곱−1 = 9,007,199,254,740,991)입니다. 이를 넘으면 이웃한 정수의 구별이 되지 않습니다.
- 정수 나눗셈
- 나눗셈의 결과를 소수로 두지 않고 몫(정수 부분)과 나머지로 나누어 구하는 계산 방법입니다. 음수를 포함하는 경우 몫은 0 방향으로 버림해 계산됩니다.
- RSA 암호
- 큰 두 소수의 곱을 키로 사용하는 공개키 암호 방식입니다. 2048비트(10진으로 600자리 초과)의 정수 연산이 쓰이는 일도 드물지 않아, 다중 정밀도 정수의 취급이 필수적입니다.
자주 묻는 질문
여담이지만 ― 컴퓨터는 "큰 숫자"를 다루는 데 서툴렀다
컴퓨터의 숫자 표현에는 오랫동안 제약이 있었습니다. 대부분의 프로그래밍 언어가 기본으로 사용하는 64비트 부동소수점(배정밀도)은 안전하게 다룰 수 있는 정수 범위가 2의 53제곱−1(9,007,199,254,740,991)까지로 정해져 있습니다. 이는 가수부가 53비트밖에 되지 않기 때문이며, 이를 넘는 정수는 표현할 때 반올림 오차가 발생합니다. 우리 사이트의 "계산기" 도구 역시 예외가 아니며 이와 동일한 정밀도 한계를 가지고 있습니다.
이 문제를 해결하는 것이 임의 정밀도 정수(흔히 bignum이라 불림)라는 개념입니다. JavaScript에서는 2020년 무렵부터 BigInt라는 새로운 형식이 모든 주요 브라우저에 표준으로 탑재되어, 메모리가 허용하는 한 자릿수 제한 없이 정수를 정확하게 다룰 수 있게 되었습니다. 다만 내부적으로는 많은 자릿수를 배열 형태로 관리하기 때문에, 자릿수가 늘어날수록 계산에 시간이 걸리는 트레이드오프가 있습니다.
암호 분야에서도 이 기술은 필수적입니다. 예를 들어 RSA 암호의 키는 2048비트(10진수로 600자리 이상)의 정수가 사용되는 경우도 드물지 않으며, 이러한 거대한 수의 곱셈・거듭제곱 나머지 연산을 정확히 수행하기 위해 임의 정밀도 정수 라이브러리가 전 세계 암호 소프트웨어에서 사용되고 있습니다.
경쟁 프로그래밍의 세계에서도 큰 계승(예: 100의 계승은 158자리)이나 피보나치 수열의 먼 항을 구하는 문제가 자주 출제됩니다. 일반 숫자 형식으로는 도중에 오차가 섞이기 때문에, 임의 정밀도 정수를 능숙하게 다룰 수 있는지가 정답률을 좌우하는 경우도 적지 않습니다.