엄청나게 큰 수에 대한 나누기는 어떻게 해야 할까요?

mydream의 이미지

4bytes의 unsigned int는 4294967295까지가 최대 표현가능한 값으로 알고 있습니다. 그래서 이 범위에서의 사칙연산만 정확하게 계산이 됩니다. 그런데 이보다 큰 수 예컨대

8756746556789384665886239948599238

라는 수의 나누기는 어떻게 해야 하나요? 십진수라 좀 그렇긴 하네요. 16진수로 언급하겠습니다.

0x84ABCD489DF83C845ECC929F7CA3D36C

같은 수에 대한 나누기를 어떻게 애햐 하나요? 이 값은 내장 타입으로는 되지 않기 때문에 배열에 담는 방식으로 하면

[0] [1] [2] [3]
7CA3D36C 5ECC929F 9DF83C84 84ABCD48

이렇게 제수는 담을 수 있습니다. 인텔 계열 CPU는 리틀 엔디언이니까요?
이 수를 10으로 나누려면 참 남감하던데요. [3] 부터 [1]까지 10으로 나누는 방식으로 하면 되지 않을까 했는데 저 수는 10 단위로 올라가는 수가 아니라 그렇게 나누면 엉터리 값이 나오게 됩니다. 방법이 없나요? 수의 계산에서 항상 자료형의 제약에 걸리는데, 나누기에 대해서만이라도 그 제약을 좀 넘어보면 좋겠습니다.

parkon의 이미지

구글에서 big number arithmetic이라고 검색하시면 여러 관련자료들을 보실 수 있습니다.
뭐 큰 숫자 처리하는 원리는 따복 따복 생각하시면 됩니다.
예를 들어, 십진수 12345가 있으면 이것을 1*10^4 + 2*10^3 + 3*10^2 + 4*10^1 + 5*10^0
이런 식으로 분해할 수 있듯이 더 큰 숫자도 비슷하게 처리할 수 있으니까요.
그럼 사칙 연산이나 다른 수학 연산들에 대한 처리를 할 수 있습니다,
물론 제법 많은 코딩이 필요하고요.

mydream의 이미지

검색해보니 참고할 만한 자료가 바로 뜨는군요. 좋은 글 감사합니다. 중요한 것은 적절한 제약이군요. 자동차에서 액셀보다 중요한 것은 브레이크인 것 같습니다.

...!의 이미지

어떻게 하는 지 공부하고 싶으신거라면 몰라도 그게 아니고 어떻게든 할 수만 있어도 된다면 직접 구현하실 필요는 없습니다. 좋은 라이브러리들이 많습니다. 예를 들어

https://gmplib.org/

가 많이 사용되지요. C++ wrapper를 원하신다면

http://www.boost.org/doc/libs/1_63_0/libs/multiprecision/doc/html/index.html

를 사용하실 수 있습니다. 많이 쓰이는 동적 언어들도 대부분 gmp binding을 가지고 있습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.