GMP «Arithmetic without limitations» The GNU
Multiple Precision
Arithmetic Library
GNU head



Documentation: 6.0.0a HTML | 6.0.0a PDF
Download: gmp-6.0.0a.tar.lz | Release notes   NEW 2014-03-24
Development: Developers' corner
GMPbench: Results | Download benchmark sources
Fun: Compute billions of digits of π using GMP!
How you can help: Donating hardware to GMP
Security: GMP server security policy
Page contents:
What is GMP?
Function categories
Download
Reporting bugs
Mailing lists
Current release status
Future releases




What is GMP?

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. GMP has a rich set of functions, and the functions have a regular interface.

The main target applications for GMP are cryptography applications and research, Internet security applications, algebra systems, computational algebra research, etc.

GMP is carefully designed to be as fast as possible, both for small operands and for huge operands. The speed is achieved by using fullwords as the basic arithmetic type, by using fast algorithms, with highly optimised assembly code for the most common inner loops for a lot of CPUs, and by a general emphasis on speed.

The first GMP release was made in 1991. It is continually developed and maintained, with a new release about once a year.

Since version 6, GMP is distributed under the dual licenses, GNU LGPL v3 and GNU GPL v2.0. These licenses make the library free to use, share, and improve, and allow you to pass on the result. The GNU licenses give freedoms, but also set firm restrictions on the use with non-free programs.

GMP is part of the GNU project. For more information about the GNU project, please see the official GNU web site.

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.

GMP is brought to you by a team listed in the manual.

GMP is carefully developed and maintained, both technically and legally. We of course inspect and test contributed code carefully, but equally importantly we make sure we have the legal right to distribute the contributions, meaning users can safely use GMP. To achieve this, we will ask contributors to sign paperwork where they allow us to distribute their work.

The GMP development infrastructure is hosted by KTH, Stockholm Sweden.


GMP function categories

There are several categories of functions in GMP:

  1. High-level signed integer arithmetic functions (mpz). There are about 150 arithmetic and logic functions in this category.
  2. High-level rational arithmetic functions (mpq). This category consists of about 35 functions, but all signed integer arithmetic functions can be used too, by applying them to the numerator and denominator separately.
  3. High-level floating-point arithmetic functions (mpf). This is the GMP function category to use if the C type `double' doesn't give enough precision for an application. There are about 70 functions in this category. New projects should strongly consider using the much more complete GMP extension library mpfr instead of mpf.
  4. C++ class based interface to all of the above. (The C functions and types can of course be used directly from C++ too.)
  5. Low-level positive-integer, hard-to-use, very low overhead functions are found in the mpn category. No memory management is performed; the caller must ensure enough space is available for the results. The set of functions is not always regular, nor is the calling interface. These functions accept input arguments in the form of pairs consisting of a pointer to the least significant word, and an integral size telling how many limbs (= words) there are in that argument. The functions in the other categories call mpn for almost all their calculations. Of these functions about 60 are public.

Download the latest release of GMP

GMP 6.0.0a lz, 1902223 bytes xz, 1904112 bytes bz2, 2319400 bytes
Europe, gmplib.org gmp-6.0.0a.tar.lz gmp-6.0.0a.tar.xz gmp-6.0.0a.tar.bz2
USA, ftp.gnu.org gmp-6.0.0a.tar.lz gmp-6.0.0a.tar.xz gmp-6.0.0a.tar.bz2

GMP releases are also available from the mirrors of ftp.gnu.org.

To try to verify that the file you have downloaded has not been tampered with, you can check that the GnuPG signature matches the contents of the file. Use your GnuPG software or a key server directly to get the key that was used for creating the signature. Starting from the repackaging of gmp-5.1.0 as gmp-5.1.0a.tar.* the following key is used to sign GMP releases:

Key ID: 0x28C67298
Key type: 2560 bit RSA
Fingerprint: 343C 2FF0 FBEE 5EC2 EDBE F399 F359 9FF8 28C6 7298

Earlier releases, up to and including the gmp-5.1.0.tar.* files, were signed with the following key:

Key ID: 0xDB899F46
Key type: 1024 bit DSA
Fingerprint: 73D4 6C36 6746 1E4B D939 7249 5D6D 47DF DB89 9F46

GnuPG signatures: gmp-6.0.0a.tar.lz.sig   gmp-6.0.0a.tar.xz.sig   gmp-6.0.0a.tar.bz2.sig

Alternatively, you could check a cryptographic checksum:

SHA1 gmp-6.0.0a.tar 595a9948dc5598b9feb54193abca35e5c4043d0b
SHA256 gmp-6.0.0a.tar 8890803a2715d592eac37dca630e36b470f047eb5ab1efe38d323b02a99ac232

Instead of using a release, you may also get the latest code from the GMP repositories. This will require some more work compared to using a release.


Reporting bugs in GMP

Please first see the manual on how to report bugs. The proper address for bug reports is gmp-bugs at gmplib.org.

Most problems with GMP these days are due to problems not in GMP, but with the compiler used for compiling the GMP sources. This is a major concern to the GMP project, since an incorrect computation is an incorrect computation, whether caused by a GMP bug or a compiler bug. We fight this by making the GMP testsuite have great coverage, so that it should catch every possible miscompilation.


GMP mailing lists

List Subscribe URL Archive URL Purpose
gmp-bugs gmplib.org/mailman/listinfo/gmp-bugs gmplib.org/list-archives/gmp-bugs/ Bug reports (not questions!). See manual.
gmp-announce gmplib.org/mailman/listinfo/gmp-announce gmplib.org/list-archives/gmp-announce/ Announcements from the developers (very little traffic)
gmp-discuss gmplib.org/mailman/listinfo/gmp-discuss gmplib.org/list-archives/gmp-discuss/ Questions, Help, Discussions
gmp-devel gmplib.org/mailman/listinfo/gmp-devel gmplib.org/list-archives/gmp-devel/ Technical discussions between developers
gmp-commit gmplib.org/mailman/listinfo/gmp-commit gmplib.org/list-archives/gmp-commit/ Commit messages

Note that we perform spam and virus filtering of these lists. The lists have been 100% spam-free during the last years.

You cannot subscribe an AOL address to any GMP mailing list, since AOL blocks our mail server until we register with them as a "bulk mailer", something we will certainly never do.

We're blocking all mail from China, since 99% of the spam arriving to the GMP moderators emanates from China. If you are affected but have a legitimate reason to send mail to the GMP project, e.g., if you work at a university or corporation with an interest in GMP, please let us know; we will open access for you.


Status of the current release

The current stable release is 6.0.0, released 2014-03-24.

Issues with GMP 6.0.0:

Issues with GMP 5.1.3:

Issues with GMP 5.1.2:

Issues with GMP 5.1.1:

Issues with GMP 5.1.0:

For patches to older GMP versions, please see the Info on older GMP releases.


Future releases

Please see the GMPng page for information on what we're working on.