BigInteger in C?
Asked Answered
T

4

34

What is the easiest way to handle huge numbers in C? I need to store values in the Area 1000^900, or in more human readable form 10^2700.

Does anybody know of an easy way to do that? Any help would really be appreciated!

Tuchun answered 19/2, 2009 at 12:42 Comment(0)
R
40

Use libgmp:

GMP is a free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating-point numbers. There is no practical limit to the precision except the ones implied by the available memory in the machine GMP runs on...

Since version 6, GMP is distributed under the dual licenses, GNU LGPL v3 and GNU GPL v2...

GMP's main target platforms are Unix-type systems, such as GNU/Linux, Solaris, HP-UX, Mac OS X/Darwin, BSD, AIX, etc. It also is known to work on Windows in both 32-bit and 64-bit mode...

Rundell answered 19/2, 2009 at 12:46 Comment(3)
GMP can handle numbers as large as 1000^900?Skewback
I have not tested but it reads "There is no practical limit to the precision except the ones implied by the available memory". A quick estimate is that 1000⁹⁰⁰<1024⁹⁰⁰ that is it fits in less than 9000 bits. I see no reason why it should break GMP.Rundell
@Skewback It can handle it easily, without breaking a sweat. My own, crappy, homebrew multiprecision library (which is an embarrassment, at least by comparison with something properly sophisticated like GMP) computes 1000^900 without difficulty, in less time than I can even measure. It's an 8,970-bit number, which is hardly a memory-buster. (Also computing it isn't as hard as it sounds, because "binary exponentiation" is super easy to implement, and blazingly efficient.)Revolutionary
D
14

There are a few libraries to help you do this (arbitrary precision mathematics):

Assuming this isn't work related (ie you're doing it for fun or its a hobby or just an oportunity to learn something), coding up a library for arbitrary precision maths is a relatively interesting project. But if you need to absolutely rely on it and aren't interested in the nuts and bolts just use a library.

Dissimilate answered 19/2, 2009 at 12:47 Comment(0)
K
6

There are a number of libraries for handling huge numbers around. Do you need integer or floating point arithmetic?

You could look at the code built into Python for the task.

You could look at the extensions for Perl for the task.

You could look at the code in OpenSSL for the task.

You could look at the GNU MP (multi-precision) library - as mentioned by kmkaplan.

Killarney answered 19/2, 2009 at 12:50 Comment(2)
What if I'm not supposed to use any external library and is only allowed to use GCC. Now, to actually store BIGINTs or perform any calculations on them what do I've to do?Eada
Read Knuth? I mean, TAOCP — The Art of Computer Programming (Volume 2, Semi-Numerical Algorithms; section 4.3 Multiple-Precision Arithmetic applies). Or any similar book covering multi-precision arithmetic.Killarney

© 2022 - 2024 — McMap. All rights reserved.