728x90
반응형
최근에 자바스크립트로 팩토리얼을 계산하는 코드를 짜다가 흥미로운 문제를 마주했다.
팩토리얼 계산 결과가 지수 표기법으로 출력된 것이다.
function extraLongFactorials(n) {
let answer = 1;
for(let i = n; i >= 1; i--){
answer *= i;
}
console.log(answer); // 1.5511210043330984e+25
}
1.5511210043330984e+25 같은 숫자. 이게 도대체 뭘까?
🔍 지수 표기법이란?
1.5511210043330984e+25는 15511210043330985984000000와 같은 숫자다.
e+25는 "10의 25제곱을 곱한다"는 뜻이고, 자바스크립트는 너무 큰 숫자를 간단하게 표현하려고 이렇게 보여준다.
❓ 왜 이런 표기로 나올까?
자바스크립트의 기본 숫자 타입인 Number는 64비트 부동소수점 형식이라
대략 15~17자리 정도까지만 정확하게 표현할 수 있다.
그래서 n!처럼 큰 숫자를 계산하면 자동으로 지수 표기법으로 바뀌는 것!
🛠 해결 방법: BigInt를 쓰자!
큰 숫자를 정확하게 다루고 싶다면 BigInt를 사용하면 된다.
BigInt는 정수의 크기에 제한 없이 계산할 수 있는 타입이다.
function extraLongFactorials(n) {
let answer = BigInt(1);
for(let i = BigInt(n); i >= BigInt(1); i--){
answer *= i;
}
console.log(answer); // 15511210043330985984000000n
}
💡 그런데 왜 n이 붙지?
BigInt 타입은 숫자 뒤에 n을 붙여서 표현한다. n은 일반 숫자가 아니라 BigInt라고 명시하는 역할을 한다.
toString()을 통해문자열로 변환하면 n 없이 출력할 수 있다.
function extraLongFactorials(n) {
let answer = BigInt(1);
for(let i = BigInt(n); i >= BigInt(1); i--){
answer *= i;
}
console.log(answer.toString()); // 15511210043330985984000000
}
728x90
반응형
'Language > Javascript' 카테고리의 다른 글
[Javascript] 자바스크립트 모듈 (export, import) (1) | 2024.10.26 |
---|---|
[Javascript] 호출 스택과 이벤트 루프 (0) | 2022.04.28 |
[Javascript] async, await (0) | 2021.12.28 |
[Javascript] 프로미스(Promise) (1) | 2021.12.26 |
[Javascript] 클래스(Class) (0) | 2021.12.26 |