JavaScript - BigInt: Handling Really Big Numbers
안녕하세요, 야심 찬 코더 여러분! 오늘 우리는 자바스크립트에서 정말로, 정말로 큰 수를 다루는 흥미로운 여정을 시작할 것입니다. 안전벨트를 고정하고, BigInt의 fascinatings한 세계를 탐험해 보겠습니다!
What is BigInt?
보자kal이 밤하늘의 별을数えて 보세요. 계속数えて 나가다가 갑자기 계산기가 "무한대"라고 말합니다. 실망스럽죠? 그래서 BigInt가 구원을 가져옵니다!
BigInt는 자바스크립트의 특별한 숫자 형식으로, 임의 길이의 정수를 표현할 수 있습니다. 일반 숫자와 달리, BigInt는 당신의 상상력(또는 컴퓨터의 메모리)만큼 큰 숫자를 다룰 수 있습니다.
Why do we need BigInt?
자바스크립트에서 일반 숫자는 64비트로 저장되며, 최대 안전한 정수 값은 9,007,199,254,740,991입니다. 이 숫자는 매우 큽니다만, 컴퓨팅의 세계에서는 때로 더 큰 숫자가 필요할 때가 있습니다!
이제 이 제한을 초과할 때 어떤 일이 일어나는지 보겠습니다:
console.log(9007199254740991 + 1); // 9007199254740992
console.log(9007199254740991 + 2); // 9007199254740992 (Oops! Same result)
보시다시피, 자바스크립트는 이 제한을 초과하는 숫자를 정확하게 표현할 수 없습니다. 여기서 BigInt가 빛을 발합니다!
Declaration and Initialization
BigInt를 만드는 것은 쉬워요. 두 가지 방법이 있습니다:
- 정수의 끝에 'n'을 추가합니다.
- BigInt() 함수를 사용합니다.
두 가지 방법을 모두 시도해 보겠습니다:
const bigNumber1 = 1234567890123456789012345678901234567890n;
const bigNumber2 = BigInt("9007199254740991");
console.log(bigNumber1); // 1234567890123456789012345678901234567890n
console.log(bigNumber2); // 9007199254740991n
끝에 'n'이 보이시나요? 이로 인해 자바스크립트가 이것이 BigInt라고 알 수 있습니다!
Basic Operations
이제 우리의 큰 숫자를 가지고, 약간의 수학을 해보겠습니다!
const a = 1234567890n;
const b = 9876543210n;
console.log(a + b); // 11111111100n
console.log(a - b); // -8641975320n
console.log(a * b); // 12193263111263526900n
console.log(a / b); // 0n (Integer division)
console.log(a % b); // 1234567890n
记住, BigInt는 항상 정수입니다.除法의 경우, 결과는 가장 가까운 정수로 내림 Rounds down to the nearest integer.
Comparison
BigInt를 비교하는 것은 일반 숫자를 비교하는 것과 같습니다:
console.log(5n > 4n); // true
console.log(5n < 4n); // false
console.log(5n === 5); // false (different types)
console.log(5n == 5); // true (type coercion)
마지막 두 줄을 주목하세요. BigInt와 일반 숫자는 ==
를 사용할 때 동일하게 간주되지만, ===
를 사용할 때는 아닙니다. 이는 ===
가 값과 형식 모두를 확인하기 때문입니다.
Conversions
때로는 BigInt와 일반 숫자 간의 변환을 해야 할 수 있습니다. 다음은 방법입니다:
const bigNum = 123456789n;
const regularNum = Number(bigNum);
console.log(regularNum); // 123456789
const backToBigInt = BigInt(regularNum);
console.log(backToBigInt); // 123456789n
큰 BigInt를 일반 숫자로 변환할 때는 정확성을 잃을 수 있으니 주의하십시오!
Examples
실제 예제로 BigInt 지식을 활용해 보겠습니다:
1. Factorials Calculation
function factorial(n) {
if (n === 0n) return 1n;
return n * factorial(n - 1n);
}
console.log(factorial(20n)); // 2432902008176640000n
이 함수는 일반 자바스크립트 숫자로는 불가능한 매우 큰 수의 계산을 할 수 있습니다!
2. Working with Really Large Prime Numbers
function isPrime(n) {
if (n <= 1n) return false;
for (let i = 2n; i * i <= n; i++) {
if (n % i === 0n) return false;
}
return true;
}
const largeNumber = 2n ** 100n - 1n;
console.log(isPrime(largeNumber) ? "Prime" : "Not Prime"); // Not Prime
이 함수는 일반 자바스크립트 숫자의 제한을 초과하는 숫자의 소수 여부를 확인할 수 있습니다!
Error Handling with BigInt
BigInt를 사용할 때 주의해야 할 몇 가지 사항이 있습니다:
try {
const result = 1n + 1; // This will throw an error
} catch (error) {
console.log("Error:", error.message); // Cannot mix BigInt and other types
}
try {
const result = Math.sqrt(4n); // This will also throw an error
} catch (error) {
console.log("Error:", error.message); // Cannot convert a BigInt value to a number
}
记住, BigInt는 수학 연산에서 다른 BigInt와만 사용할 수 있으며, 많은 Math 함수는 BigInt를 지원하지 않습니다.
BigInt Methods
가장 흔히 사용되는 BigInt 메서드 목록입니다:
Method | Description | Example |
---|---|---|
BigInt() | Creates a BigInt value | BigInt(123) |
BigInt.asIntN() | Wraps a BigInt value to a signed integer between -2^(n-1) and 2^(n-1)-1 | BigInt.asIntN(3, 5n) // 5n |
BigInt.asUintN() | Wraps a BigInt value to an unsigned integer between 0 and 2^n-1 | BigInt.asUintN(3, 5n) // 5n |
BigInt.prototype.toString() | Returns a string representation of a BigInt value | (123n).toString() // "123" |
BigInt.prototype.valueOf() | Returns the primitive value of a BigInt object | Object(123n).valueOf() // 123n |
이제 여러분은 별보다도 큰 숫자를 다루는 능력을 갖추었습니다. 기억하세요, 큰 힘에는 큰 책임이 따릅니다 - BigInt를 지혜롭게 사용하세요!
Happy coding, and may your numbers always be as big as your dreams!
Credits: Image by storyset