投稿者 |
メッセージ |
|
< PHPプログラミング ~ rand()の最大値 |
|
時間:
水 8月 03, 2005 12:19 pm
|
|
|
|
rand()やmt_rand()でgetrandmax()以上の数値を出すことは可能でしょうか?
現在は下のようにしてやっています
(例:$rnd1=mt_rand(0,$num1);が出したくて、$num1 > mt_getrandmax()のとき)
$abc=mt_getrandmax();
if($num1 > $abc){
$def = round($num1 / $abc);
for($i=0; $i<$def; $i++){
$rnd1 += mt_rand();
}
}else{
$rnd1 = mt_rand( 0 , $num1 );
}
が、この方法だと乱数が正確でなく、処理に時間もかかります。
何か方法はないでしょうか? |
|
|
|
|
|
|
|
時間:
木 8月 11, 2005 12:32 am
|
|
|
|
mt_rand()がどの値も一様な確立で出すとすれば、RAND_MAXの二倍までの乱数は
Code: |
$rand = mt_rand(0,1)*mt_getrandmax + mt_rand();
|
一般化で RAND_MAXの m/n倍(RAND_MAX>m>n>0)のときは
Code: |
$rand = ceil((mt_rand(0,$m-1)*mt_getrandmax + mt_rand())/$n);
|
RAND_MAX/n付近では確立が少しだけ一様でないけど、RAND_MAXより大きいような乱数の場合では一様とみなせるのでしょう。
実際の数字を(例の$num)を有利化する部分は
Code: |
$n=1024;$m=round(mt_getrandmax()*$n/$num);
|
とかで十分かと |
|
|
|
|
|
|
|
|
新規投稿: 不可 返信: 不可t 自分の記事の編集: 不可 自分の記事の削除: 不可 投票への参加: 不可
|
|