- 468 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 18:38:39 ]
- 下記のように1〜5万の数をランダムに表示していき、かつ一度表示した数は表示しないというコードをゴリゴリ書きました。
しかしこれは何故か3万回を超えた辺りから重複による何十回ものスキップ処理が入ってしまいます。 3万回数字を表示した時点でスキップが起こる確率は3/5=60%なので何十回ものスキップが頻発するというのはおかしいです。 (例えば10回のスキップ処理が連続で起こる確率は0.6^10でたった0.6%であるにも関わらず、こういう規模の事象が頻発する。3桁レベルのスキップも起こったりする。) Perlのランダム関数がおかしいとは考えにくいのですが、何故こういう事が起こってしまうんでしょうか?教えてください。 $starttime = (times())[0]; $sessionstarttime = (times())[0]; $count=1; $skipcount=0; @triedNumbers=(); print " count skip num total this\n"; while(1){ $number = int(rand(50000))+1; $new = 1; foreach(@triedNumbers) { if($number == $_) { $skipcount++; $new = 0; last; } } if($new==0){next;} push(@triedNumbers,$number); $endtime = (times())[0]; $totaltime = $endtime-$starttime; $sessiontime=$endtime-$sessionstarttime; printf "%6d %4d %6d %3ds %3ds\n", $count, $skipcount,$number,$totaltime,$sessiontime; $sessionstarttime = (times())[0]; $skipcount=0; $count++; }
|

|