Next: Random State Seeding, Previous: Random Number Functions, Up: Random Number Functions [Index]
stateを初期化してデフォルトのアルゴリズムをセットします。アルゴリズムは乱数生成の速度とランダム性のバランスを決定しますので,特別な要求が不要のアプリケーションにはデフォルトのものを使用しましょう。現行の実装ではgmp_randinit_mt
を使います。
stateを初期化してメルセンヌ・ツイスター(Mersenne Twister)アルゴリズムをセットします。このアルゴリズムは高速で良いランダム性を持っています。
stateを初期化して線型合同法X = (a*X + c) mod 2^m2expをセットします。
このアルゴリズムではXの低位ビットのランダム性があまり良くありません。最小有効ビットの周期は2以下で,2番目のビットの周期は4以下,・・・となります。Xの上位半分だけを使って生成することに起因します。
m2exp/2 bits以上の乱数を生成する場合は,反復を繰り返して結果を繋ぎ合わせる他ありません。
stateを初期化して線型合同法をセットし,gmp_randinit_lc_2exp
関数に適用します。a,c,m2expはテーブルから選び,Xのsizeビット以上を使用する,つまり m2exp/2 >= sizeであるようにします。
成功していれば返り値は非ゼロになります。sizeがテーブルのデータより大きい時にはゼロを返します。sizeの最大値は現状では128です。
ropを初期化して,アルゴリズムや状態をopからコピーします。
この関数は廃止予定です。
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
関数を使って下さい。)。
state変数のメモリ領域を全て解放します。