Next: , Previous: , Up: Random Number Functions   [Index]


9.1 乱数状態変数の初期化

Function: void gmp_randinit_default (gmp_randstate_t state)

stateを初期化してデフォルトのアルゴリズムをセットします。アルゴリズムは乱数生成の速度とランダム性のバランスを決定しますので,特別な要求が不要のアプリケーションにはデフォルトのものを使用しましょう。現行の実装ではgmp_randinit_mtを使います。

Function: void gmp_randinit_mt (gmp_randstate_t state)

stateを初期化してメルセンヌ・ツイスター(Mersenne Twister)アルゴリズムをセットします。このアルゴリズムは高速で良いランダム性を持っています。

Function: void gmp_randinit_lc_2exp (gmp_randstate_t state, const mpz_t a, unsigned long c, mp_bitcnt_t m2exp)

stateを初期化して線型合同法X = (a*X + c) mod 2^m2expをセットします。

このアルゴリズムではXの低位ビットのランダム性があまり良くありません。最小有効ビットの周期は2以下で,2番目のビットの周期は4以下,・・・となります。Xの上位半分だけを使って生成することに起因します。

m2exp/2 bits以上の乱数を生成する場合は,反復を繰り返して結果を繋ぎ合わせる他ありません。

Function: int gmp_randinit_lc_2exp_size (gmp_randstate_t state, mp_bitcnt_t size)

stateを初期化して線型合同法をセットし,gmp_randinit_lc_2exp関数に適用します。acm2expはテーブルから選び,Xsizeビット以上を使用する,つまり m2exp/2 >= sizeであるようにします。

成功していれば返り値は非ゼロになります。sizeがテーブルのデータより大きい時にはゼロを返します。sizeの最大値は現状では128です。

Function: void gmp_randinit_set (gmp_randstate_t rop, gmp_randstate_t op)

ropを初期化して,アルゴリズムや状態をopからコピーします。

Function: void gmp_randinit (gmp_randstate_t state, gmp_randalg_t alg, …)

この関数は廃止予定です。

stateと初期化してalgで指定されたアルゴリズムをセットします。今のところGMP_RAND_ALG_LCのみ指定可能で,gmp_randinit_lc_2exp_size関数が使われます。3つ目のパラメータはunsigned long型変数で,関数に対するsizeを決めるものです。GMP_RAND_ALG_DEFAULT もしくは 0と指定すると,どちらもGMP_RAND_ALG_LCと指定されたことになります。

gmp_randinit関数はグローバル変数であるgmp_errnoにビットをセットしてエラー発生が分かるようにします。algがサポートされていなければ,GMP_ERROR_UNSUPPORTED_ARGUMENTとなり,sizeパラメータが大きすぎると GMP_ERROR_INVALID_ARGUMENTとなります。このエラー検知機能はスレッドセーフではありません(不都合であれば代わりにgmp_randinit_lc_2exp_size関数を使って下さい。)。

Function: void gmp_randclear (gmp_randstate_t state)

state変数のメモリ領域を全て解放します。