L. GMP 関数

導入

以下の関数により、GNU MP ライブラリを使用して 任意長の整数を使用することが可能になります。

これらの関数は、PHP 4.0.4 で追加されました。

注意: 多くの GMP 関数は、 resource で定義された GMP 数を 引数としてとります。しかし、これらの関数の多くは、数値と文字列の 両方を引数として指定可能で、後者は数値に変換することが可能です。 また、整数引数を使用して処理を行うより高速な関数がある場合には、 指定された引数が整数である場合により低速となる関数の代わりに 使用されます。これは透過的に行われるため、結果的に、GMP 数値を 引数とする全ての関数について整数を使用することが可能です。関数 gmp_init() も参照ください。

警告

より大きな整数を明示的に指定するには、文字列として指定してください。 そうしない場合、PHP は値ををまず整数リテラルとして解釈し、 GMP にわたるまでに精度の劣化を生じる可能性が あります。

注意: PHP 5.1.0 以降、この拡張モジュールは Windows でも使用可能です。

要件

http://www.swox.com/gmp/ から GMP ライブラリをダウンロード可能です。 このサイトでは、 GMP のマニュアルも入手可能です。

これらの関数を使用するには、GMP バージョン 2 以降が必要です。 中には、より新しいバージョンの GMP ライブラリを必要とする関数も あります。

インストール手順

これらの関数を利用可能とするには、オプション --with-gmp を使用することにより GMP サポートを有効にして PHP をコンパイルする必要が あります。

実行時設定

設定ディレクティブは定義されていません。

リソース型

リソース型は定義されていません。

定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

GMP_ROUND_ZERO ( integer )

GMP_ROUND_PLUSINF ( integer )

GMP_ROUND_MINUSINF ( integer )

例 1. GMP を使用した階乗関数

<?php
function fact ( $x )
{
    
$return = 1 ;
    for (
$i = 2 ; $i < $x ; $i ++) {
        
$return = gmp_mul ( $return , $i );
    }
    return
$return ;
}

echo
gmp_strval ( fact ( 1000 )) . "\n" ;
?>

この例は、1000 の階乗(非常に大きな数です)を非常に高速に計算します。

参考

より数学的な関数が、 BCMath 任意精度関数 および 数学関数 の節にあります。

目次
gmp_abs  -- 絶対値
gmp_add  -- 数値を加算する
gmp_and  -- 論理積を計算する
gmp_clrbit  -- ビットをクリアする
gmp_cmp  -- 数を比較する
gmp_com  -- 1 の補数を計算する
gmp_div_q  -- 数値を除算する
gmp_div_qr  -- 除算を行い、商と余りを得る
gmp_div_r  -- 除算の余りを計算する
gmp_div  --  gmp_div_q() のエイリアス
gmp_divexact  -- 正確な除算
gmp_fact  -- 階乗
gmp_gcd  -- 最大公約数を計算する
gmp_gcdext  -- 最大公約数と乗数を計算する
gmp_hamdist  -- ハミング距離
gmp_init  -- GMP 数を作成する
gmp_intval  -- GMP 数を整数に変換する
gmp_invert  -- 法による逆
gmp_jacobi  -- ヤコビ記号
gmp_legendre  -- ルジェンドル記号
gmp_mod  -- モジュロ演算
gmp_mul  -- 数値を乗算する
gmp_neg  -- 符号を反転する
gmp_nextprime  -- 次の素数を見つける
gmp_or  -- 論理和を計算する
gmp_perfect_square  -- 平方数かどうかを調べる
gmp_popcount  -- セットされているビットの数
gmp_pow  -- べき乗を計算する
gmp_powm  -- べき乗とモジュロを計算する
gmp_prob_prime  -- 数が"ほぼ素数"であるかどうかを調べる
gmp_random  -- 乱数
gmp_scan0  -- 0 を探す
gmp_scan1  -- 1 を探す
gmp_setbit  -- ビットを設定する
gmp_sign  -- 数の符号
gmp_sqrt  -- 平方根を計算する
gmp_sqrtrem  --  余りつきの平方根
gmp_strval  -- GMP 数を文字列に変換する
gmp_sub  -- 数値の減算
gmp_xor  -- 排他的論理和を計算する