자바스크립트에서 아주 큰 수 다루기 (BigInt)

배범준·2020년 1월 19일
0

자바스크립트로 알고리즘 문제를 풀다가 난관에 봉착했다.
문제에서 주어진 값의 범위는 2^62 이하로 아주 큰 정수였다.
자바스크립트의 Number 타입은 정수를 안정적으로 나타낼 수 있는 값이 한정적이라 큰 수를 다룰 때 아래처럼 값의 정확도를 잃게 된다.

자바스크립트에 내장된 객체인 BigInt를 사용해 이를 해결할 수 있다.


위와같이 숫자뒤에 n을 붙이거나 BigInt()를 호출해서 값을 생성할 수 있다.
Number로 표현했을때 Infinity가 되는 아주 큰 값도 BigInt로 정수형태를 잃지 않고 표현할 수 있다.

다만 연산할 때는 Number 와 함께 연산할 수 없고, BigInt끼리만 연산 가능하다.
또한 max,min,absMath객체의 함수들도 사용할 수 없다.

arr = [-3n,-5n,-9n,6n,10n]
> (5) [-3n, -5n, -9n, 6n, 10n]
arr.sort()
> (5) [-3n, -5n, -9n, 10n, 6n]

위에서 볼 수 있듯이 자주 사용되는 Array의 내장함수인 sort함수도 BigInt가 담긴 배열에 사용했을 때 잘못된 결과를 도출하기 때문에,
이들을 정렬할 때는 직접 sort함수를 구현해야 한다.

BigInt MDN 문서

0개의 댓글