多倍長整数演算ライブラリ (GNU MP)

概要

GNUプロジェクトから多倍長精度演算ライブラリ(GNU Multiple Precision Arithmetic Library)が提供されています(http://gmplib.org/).以下,GNU MPと呼びます. GNU MPは,多倍長精度の符号付整数(signed integer)だけではなく,有理数(rational number),浮動小数点数(floating point number)も扱うことができそれらを対象とする算術関数を豊富に持っています.

なお,GMP から分岐したプロジェクトに MPIR (Multiple Precision Integers and Ratinals)(http://mpir.org/) があります.GMP と互換性があり,Windows環境もサポートされています.


GNU MPには以下の6種類の関数群があります.

ここでは,暗号で使われる多倍長整数に関連した関数について解説します.

GNU MPを使った典型的なプログラム例を示します.

#include <stdio.h>
/* ヘッダファイルgmp.hのインクルード */
#include "gmp.h"

int main(int argc, char **argv)
{
    /* 符号付整数型の変数a,b,cの宣言 */
    mpz_t a, b, c;

    /* 変数a,cの初期化と,aの初期値の設定 */
    mpz_init(a);
    mpz_init(c);
    mpz_set_str(a, argv[1], 10);

    /* 変数bの初期化と値割り当て */
    mpz_init_set_str(b ,"1234567890",10);

    /* 変数aと変数bの積を変数cに設定 */
    mpz_mul(c, a, b);

    /* 変数cの内容をストリームに出力 */
    mpz_out_str(stdout, 10, c);

    /* 変数領域の解放 */
    mpz_clear(a);
    mpz_clear(b);
    mpz_clear(c);
}

GNU MPでは,計算機の1語で表わされる多倍長整数の処理単位を limb と呼びます.多くの場合, limb は32または64ビットで構成されます.すなわち,多倍長整数はその大きさに応じた複数個のlimbで構成されます.C言語における limb のデータ型は mp_limb_t です.

一般的規則として,すべての関数は出力用の引数が入力用の引数より前にきます.また,入力引数と出力引数に同じ変数を指定できます.

以下,符号付整数演算関数の主な関数を機能別に分類して示します.関数のパラメータで rop は出力用パラメータ,op は入力用パラメータを表します.また,base は数値の基数を表します.

初期化と代入

変換処理

算術演算

その他

inserted by FC2 system