Movatterモバイル変換


[0]ホーム

URL:


コンテンツにスキップ
Wikipedia
検索

GNU Multi-Precision Library

出典: フリー百科事典『ウィキペディア(Wikipedia)』
GNU Multiple-Precision Library
開発元GNUプロジェクト
初版1991年 (35年前) (1991)
最新版
6.3.0 /2023年7月30日 (2年前) (2023-07-30)[1]
リポジトリgmplib.org/repo/gmp
プログラミング
言語
C
プラットフォームクロスプラットフォーム
種別任意精度演算ライブラリ
ライセンスLGPLv3GPLv2 のデュアルライセンス
公式サイトgmplib.org
テンプレートを表示

GNU Multi-Precision LibraryGMP)は、多倍長整数など任意精度の算術ライブラリで、自由ソフトウェアである。符号付き整数有理数浮動小数点数を扱う。事実上、動作中のハードウェアが持つメモリ容量以外には精度は制限されない(オペランドの大きさは32ビットマシンでは 231 ビット、64ビットマシンでは 237 ビット[2])。様々な関数があり、それらが一貫したインタフェースで提供されている。基本インタフェースはC言語だが、他の言語用ラッパーを使えば、C++OCamlPerlPythonなどでも使える。また、Ruby 2.1のように[3]、言語コアに組み込まれている例もある。

GMPの主な用途は暗号(実用と研究)、インターネットセキュリティ、数式処理システムである。

GMPは、どんなオペランドの大きさでも他の多倍長整数ライブラリよりも高速であることを目標としている。このために、以下の点を重視している。

  • 基本算術型としてフルワードを使う。
  • オペランドの大きさによってそれぞれ異なるアルゴリズムを使う。非常に大きな数に有効なアルゴリズムは、小さい数では遅いことが多い。
  • 重要なループには高度に最適化したアセンブリ言語コードを使う。当然、CPUによって異なったものになる。

最初のGMPは1991年にリリースされた。その後継続的に開発と保守が行われている。

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

GMPは多くの数式処理システムで整数の算術に使われている。例えばMathematicaがGMPを採用している[4]

GMPはGCCのビルドに必要である。

コード例

[編集]

ここでは、GMPライブラリを使って大きな数字を掛け合わせて表示するC言語のコード例を示す。

#include<stdio.h>#include<gmp.h>intmain(void){mpz_tx,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);return0;}

このコードは、7612058254738945×9263591128439081の値を計算している。

このプログラムをコンパイルして実行すると、次のような結果が得られる。(Unixタイプのシステムでコンパイルする場合は-lgmpフラグが使用される)

    7612058254738945*    9263591128439081--------------------70514995317761165008628990709545

C++プログラムで同様の内容を書くと次のようになる。(Unixタイプのシステムでコンパイルする場合は-lgmpxx -lgmpフラグが使用される)

#include<iostream>#include<gmpxx.h>intmain(){mpz_classx("7612058254738945");mpz_classy("9263591128439081");std::cout<<"    "<<x<<"\n"<<"*\n"<<"    "<<y<<"\n"<<"--------------------\n"<<x*y<<"\n";return0;}

言語バインディング

[編集]
ライブラリ名言語ライセンス
GNU Multi-Precision LibraryC,C++LGPL
Math::GMPPerlLGPL
Math::GMPz,Math::GMPf andMath::GMPqPerlArtistic License v1.0 +GPL v1.0-or-later
General Multiprecision Python ProjectPythonLGPL
R package 'gmp'R言語GPL
The RubyGems projectRubyApache 2.0
GNU Multi-Precision Library for PHPPHPPHP
GNU Multi-Precision Routines for SBCLCommon Lispパブリックドメイン
Ch GMPCh (プログラミング言語)英語版プロプライエタリ
Parallel GMP Wrapper for BMDFM BMDFM LISP / Cパブリックドメイン
Glasgow Haskell Compiler
(The implementation ofInteger
is basically a binding to GMP)
HaskellBSD
luajit-gmpLuaJITMIT
gmp-wrapper-for-delphiDelphiMIT
ZarithOCamlLGPL
Math.Gmp.Native Library.NETMIT
nim-gmpNimMIT

脚注

[編集]
  1. ^GMP 6.3.0 released”. 2025年1月14日閲覧。
  2. ^Future releases
  3. ^GCの変更と高速化を盛り込んだRuby 2.1.0@IT、2014年1月7日(2015年11月11日閲覧)。
  4. ^Numerical computation features for Mathematica 5.0 Rob Knapp

関連項目

[編集]

外部リンク

[編集]
歴史
上品なグニュー
ライセンス
ソフトウェア
一覧
代表者
その他
典拠管理データベース: 国立図書館ウィキデータを編集
https://ja.wikipedia.org/w/index.php?title=GNU_Multi-Precision_Library&oldid=104576660」から取得
カテゴリ:

[8]ページ先頭

©2009-2026 Movatter.jp