GNU Multi-Precision Library

GNU Multi-Precision Library（GMP）は、多倍長整数など任意精度の算術ライブラリで、フリーソフトウェアである。符号付き整数、有理数、浮動小数点数を扱う。事実上、動作中のハードウェアが持つメモリ容量以外には精度は制限されない（オペランドの大きさは32ビットマシンでは 231 ビット、64ビットマシンでは 237 ビット）。様々な関数があり、それらが一貫したインタフェースで提供されている。基本インタフェースはC言語だが、他の言語用ラッパーを使えば、C++、OCaml、Perl、Pythonなどでも使える。また、Ruby 2.1のように、言語コアに組み込まれている例もある。
GMPの主な用途は暗号（実用と研究）、インターネットセキュリティ、数式処理システムである。
GMPは、どんなオペランドの大きさでも他の多倍長整数ライブラリよりも高速であることを目標としている。このために、以下の点を重視している。
最初のGMPは1991年にリリースされた。その後継続的に開発と保守が行われている。
公式サイトがgnu.orgにないので混乱する場合があるが、GMPはGNUプロジェクトの一部であり、GNU Lesser General Public License (LGPL) でライセンスされている。
GMPは多くの数式処理システムで整数の算術に使われている。例えばMathematicaがGMPを採用している。
GMPはGCCのビルドに必要である。
コード例.
ここでは、GMPライブラリを使って大きな数字を掛け合わせて表示するC言語のコード例を示す。
int main(void) {
 mpz_t x, y, result;
 mpz_init_set_str(x, "7612058254738945", 10);
 mpz_init_set_str(y, "9263591128439081", 10);
 mpz_init(result);
 mpz_mul(result, x, y);
 gmp_printf(" %Zd\n"
 "*\n"
 " %Zd\n"
 "--------------------\n"
 "%Zd\n", x, y, result);
 /* free used memory */
 mpz_clear(x);
 mpz_clear(y);
 mpz_clear(result);
 return 0;
このコードは、7612058254738945×9263591128439081の値を計算している。
このプログラムをコンパイルして実行すると、次のような結果が得られる。(Unixタイプのシステムでコンパイルする場合はcodice_1フラグが使用される)
 7612058254738945
 9263591128439081
70514995317761165008628990709545
C++プログラムで同様の内容を書くと次のようになる。(Unixタイプのシステムでコンパイルする場合はcodice_2フラグが使用される)
int main() {
 mpz_class x("7612058254738945");
 mpz_class y("9263591128439081");
 std::cout « " " « x « "\n"
 « "*\n"
 « " " « y « "\n"
 « "--------------------\n"
 « x * y « "\n";
 return 0;