자바스크립트에서 안전한 최대 정수 값은 얼마일까?
1분 읽기
자바스크립트에서 안전한 최대 정수 값은 얼마일까?
정수에서의 안전함
자바스크립트에서 "안전한" 최대 정수의 값은 얼마일까?
여기서의 안전함이란 정수를 정확하고 올바르게 비교할 수 있음을 의미한다.
자바스크립트의 Number 자료형은 ECMAScript는 IEEE 754에 기술된 배정밀도 부동소숫점 형식 숫자 체계를 사용한다.
따라서, -(253- 1)과 253 - 1 사이의 숫자만 안전하게 표현할 수 있으며 범위를 벗어나면, 더 이상 정수를 안전하게 표시할 수 없다.
안전한 최대 정수 값 확인하기
Number로 사용 가능한 최대 정수 값은 Number의 정적 속성 Number.MAX_SAFE_INTEGER을 통해 확인할 수 있으며,
전달된 정수의 값이 253 - 1을 초과하지 않는 안전한 값인지 확인하기 위해서는 Number.isSafeInteger() 매서드를 사용하여 확인할 수 있다.
const x = Number.MAX_SAFE_INTEGER + 1;
const y = Number.MAX_SAFE_INTEGER + 2;
console.log(Number.isSafeInteger(x)); // false
console.log(Number.isSafeInteger(y)); // false
console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
console.log(x === y); // trueNumber.MAX_SAFE_INTEGER보다 큰 값은 실제로는 Number.MAX_SAFE_INTEGER와 같은 값으로 취급되어 정확한 비교를 할 수 없다.
BigInt를 통한 큰 정수 처리
자바스크립트에서 Number의 최댓값인 253 - 1. 보다 큰 정수 숫자를 다뤄야 한다면 명시적으로 BigInt를 사용해야 한다.
BigInt는 Number 자료형과는 달리 253 - 1 보다 큰 정수를 안전하게 처리할 수 있다.
const theBiggestInt = 9007199254740991n;
const alsoHuge = BigInt(9007199254740991); // 9007199254740991nBigInt를 Number로 변환하는 과정에서 정확도를 유실할 수 있으므로, 253보다 큰 값을 예상할 수 있는 경우에는 BigInt만 사용하는 것이 좋다.
관련 글
1분 읽기
자바스크립트로 구현하는 힙
힙(Heap) 자료구조의 개념과 Min Heap, Max Heap을 JavaScript와 TypeScript로 구현하는 방법을 정리합니다.
4분 읽기
소수 구하기
소수 판별법과 소수를 구하는 알고리즘을 정리합니다.
1분 읽기
[프로그래머스 Level 2] 미로 탈출
프로그래머스 미로 탈출을 BFS로 풀이합니다.