티스토리 뷰

자바스크립트에서 아주 큰 수를 처리할때 조금 문제가 있어요

뭔가 좀 이상하죠..?

a*b / b == a 는 true 여야 하는데 말이죠

신명나는 상황입니다

큰 수를 처리할때 문제가 생기는군요.


그래서 자바스크립트에서 이런 큰 수를 처리하기 위한 라이브러리를 소개하고자합니다


https://github.com/peterolson/BigInteger.js

빅인티저라는 라이브러리입니다


사용방법은 일단 문서내에 아래 코드를 포함시키세요

<script src="http://peterolson.github.com/BigInteger.js/BigInteger.min.js"></script>

그런다음에 다음과 같이 사용하면 됩니다.

위에 문제가있던 큰 수의 연산을 해보도록 하겠습니다


간단히 브라우저 콘솔(F12)상에서 해보고싶다면 다음을 콘솔에 붙여넣으세요

(function(pr){var loadJS = function(implementationCode, location){var url = pr+'://peterolson.github.com/BigInteger.js/BigInteger.min.js';var scriptTag = document.createElement('script');scriptTag.src = url;scriptTag.onload = implementationCode;scriptTag.onreadystatechange = implementationCode;location.appendChild(scriptTag);};loadJS(function(){console.log('Loading Library complete');}, document.head);})(location.href.split(':')[0]==='https'?'https':'http');


그리고 다음과 같이 해봅니다

같은 동작, 다른결과입니다


이번에는 거듭제곱을 해보겠습니다

거듭제곱이란 이런것을 의미합니다.

작은 수는 잘 됩니다.

하지만 큰 수가 되면 위에서 봤듯 값에 오차가 생겨버립니다.

그래서 bigInt 라이브러리를 사용해서하면 다음과 같습니다


123456 ** 123456 의 결과는 Infinity 가 나오는 반면 bigInt 라이브러리로는 위와같은 결과가 나왔습니다.

이 수의 자릿수는 628,579 자였습니다

Math_pow_123456_123456.txt


이 bigInt 클래스의 메소드중 toJSNumber() 라는 것이 있습니다. 이것은 bigInt 를 JS에서의 Number 로 바꿔서 리턴해주는 함수인데요 이것을 한번 해보겠습니다


bigInt 의 toString() 은 숫자를 문자로 반환해줍니다.

위의 결과에서 보듯 JSNumber 는 숫자표현에 한계가 있는것이 확인됩니다.



댓글
댓글쓰기 폼
공지사항
Total
30,511
Today
25
Yesterday
20
링크
«   2018/09   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
글 보관함