最新の「新着記事」はここから New!
2008-09-08
srand関数 - 再現性のある乱数を生成する
再現性のある乱数を生成するには、rand関数を呼び出す前にsrand関数に適当な数値を与えます。
# 乱数発生アルゴリズムを初期化 srand $seed; rand $num;
コンピュータにおける乱数の生成
コンピュータは演算によって乱数を発生させます。ということはこれは乱数ではありません。コンピュータは人間がさいころを投げるようには、ランダムな分布を発生させることはできません。
コンピュータができることは、「なるべく均等な分布を発生させるアルゴリズム」を使って数値列を作ることだけです。このアルゴリズムは初期値の違いによって分布を変えます。これを擬似乱数といいます。
初期値の違いによって分布を変えるということは、言い換えれば初期値が同じであれば分布を変えないということです。
rand関数が毎回異なる乱数列を発生させるように見えるのは、rand関数が最初に使われるときに、暗黙的にsrand関数で初期化されるからです。プログラムを動かすたびに異なる初期値が使われます。
srandに与える初期を固定することで、再現性のある乱数を発生させることができます。
関連
サンプル
use strict; use warnings; print "(1)再現性のある乱数を発生させる。\n"; print"乱数列の生成(1回目)\n"; # 乱数発生アルゴリズムの初期化に利用される(seedは種という意味) my $seed = 12314; # 乱数発生アルゴリズムを初期化 srand $seed; for my $i (1 .. 10) { print "$i回目: " . int(rand 100) . "\n"; } print "\n"; print "乱数列の生成(2回目)\n"; # 乱数発生アルゴリズムを初期化 srand $seed; for my $i (1 .. 10) { print "$i回目: " . int(rand 100) . "\n"; } print "\n";


