GNU Multi-Precision Library

GNU Multi-Precision Library (GMP)とは



GNU Multi-Precision Library(GMP)は、任意精度演算を可能にするフリーの数値計算ライブラリです。GMPは、符号付き整数有理数浮動小数点数を扱うことができ、実質的にハードウェアのメモリ容量に制限されることなく、非常に大きな数値の計算が可能です。

GMPの特徴



GMPは、その設計において速度を重視しており、オペランドのサイズに応じて最適なアルゴリズムを選択し、重要なループには高度に最適化されたアセンブリ言語コードを使用しています。これにより、様々なサイズの数値に対して高いパフォーマンスを発揮します。

主な特徴は以下の通りです。

任意精度: 事実上、メモリ容量に制限されない精度で計算が可能
高速性: オペランドのサイズに応じて最適なアルゴリズムを選択
多様な関数: 一貫したインターフェースで様々な関数を提供
多言語対応: C言語の他、C++, OCaml, Perl, Pythonなど様々な言語で使用可能

GMPの利用例



GMPは、暗号技術、インターネットセキュリティ、数式処理システムなど、高度な計算能力を必要とする分野で広く利用されています。例えば、Mathematicaなどの数式処理システムでは、整数の演算にGMPが採用されています。また、GCCのビルドにもGMPが必要です。

以下にC言語C++でのコード例を示します。

C言語の例



c

include


include



int main() {
mpz_t a, b, result;

// Initialize GMP integers
mpz_init(a);
mpz_init(b);
mpz_init(result);

// Set values for a and b
mpz_set_str(a, "7612058254738945", 10);
mpz_set_str(b, "9263591128439081", 10);

// Calculate the product of a and b
mpz_mul(result, a, b);

// Print the result
gmp_printf("%Zd
", result);

// Clear GMP integers
mpz_clear(a);
mpz_clear(b);
mpz_clear(result);

return 0;
}


C++の例



cpp

include


include



int main() {
mpz_class a = "7612058254738945";
mpz_class b = "9263591128439081";

// Calculate the product of a and b
mpz_class result = a b;

// Print the result
std::cout << result << std::endl;

return 0;
}


ライセンスGNUプロジェクト



GMPはGNUプロジェクトの一部であり、GNU Lesser General Public License (LGPL) でライセンスされています。公式サイトがgnu.orgにないため紛らわしい場合がありますが、GNUプロジェクトの一部です。

まとめ



GMPは、高度な数値計算を必要とする様々な分野で利用されている重要なライブラリです。その高速性と精度の高さから、今後も広く利用されていくことが期待されます。

関連情報



多倍長整数
PARI/GP
GNU MPFR

外部リンク



公式サイト
GNU MP 6.1.2マニュアル日本語訳(PDF, Texinfoソース)

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。