엄청나게 큰 수에 대한 나누기는 어떻게 해야 할까요?
글쓴이: mydream / 작성시간: 금, 2017/03/31 - 7:05오후
4bytes의 unsigned int는 4294967295까지가 최대 표현가능한 값으로 알고 있습니다. 그래서 이 범위에서의 사칙연산만 정확하게 계산이 됩니다. 그런데 이보다 큰 수 예컨대
8756746556789384665886239948599238
라는 수의 나누기는 어떻게 해야 하나요? 십진수라 좀 그렇긴 하네요. 16진수로 언급하겠습니다.
0x84ABCD489DF83C845ECC929F7CA3D36C
같은 수에 대한 나누기를 어떻게 애햐 하나요? 이 값은 내장 타입으로는 되지 않기 때문에 배열에 담는 방식으로 하면
[0] [1] [2] [3]
7CA3D36C 5ECC929F 9DF83C84 84ABCD48
이렇게 제수는 담을 수 있습니다. 인텔 계열 CPU는 리틀 엔디언이니까요?
이 수를 10으로 나누려면 참 남감하던데요. [3] 부터 [1]까지 10으로 나누는 방식으로 하면 되지 않을까 했는데 저 수는 10 단위로 올라가는 수가 아니라 그렇게 나누면 엉터리 값이 나오게 됩니다. 방법이 없나요? 수의 계산에서 항상 자료형의 제약에 걸리는데, 나누기에 대해서만이라도 그 제약을 좀 넘어보면 좋겠습니다.
Forums:
구글에서 big number arithmetic이라고
구글에서 big number arithmetic이라고 검색하시면 여러 관련자료들을 보실 수 있습니다.
뭐 큰 숫자 처리하는 원리는 따복 따복 생각하시면 됩니다.
예를 들어, 십진수 12345가 있으면 이것을 1*10^4 + 2*10^3 + 3*10^2 + 4*10^1 + 5*10^0
이런 식으로 분해할 수 있듯이 더 큰 숫자도 비슷하게 처리할 수 있으니까요.
그럼 사칙 연산이나 다른 수학 연산들에 대한 처리를 할 수 있습니다,
물론 제법 많은 코딩이 필요하고요.
좋은 키워드 알려주셔서 감사합니다.
검색해보니 참고할 만한 자료가 바로 뜨는군요. 좋은 글 감사합니다. 중요한 것은 적절한 제약이군요. 자동차에서 액셀보다 중요한 것은 브레이크인 것 같습니다.
어떻게 하는 지 공부하고 싶으신거라면 몰라도 그게
어떻게 하는 지 공부하고 싶으신거라면 몰라도 그게 아니고 어떻게든 할 수만 있어도 된다면 직접 구현하실 필요는 없습니다. 좋은 라이브러리들이 많습니다. 예를 들어
https://gmplib.org/
가 많이 사용되지요. C++ wrapper를 원하신다면
http://www.boost.org/doc/libs/1_63_0/libs/multiprecision/doc/html/index.html
를 사용하실 수 있습니다. 많이 쓰이는 동적 언어들도 대부분 gmp binding을 가지고 있습니다.
댓글 달기