投稿者 メッセージ
<  PHPプログラミング  ~  rand()の最大値
YuponTKD
投稿1時間: 水 8月 03, 2005 12:19 pm  引用



登録日: 2005年8月 03日
投稿記事: 1

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 );
}

が、この方法だと乱数が正確でなく、処理に時間もかかります。
何か方法はないでしょうか?
トップに移動
ユーザー情報を表示 メッセージを送信 ウェブサイトに移動
ach
投稿1時間: 木 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);

とかで十分かと
トップに移動
特定期間内の記事を表示:   
All times are GMT +9:00

次のトピックを表示
前のトピックを表示
Page 1 of 1
フォーラム一覧  ~  PHPプログラミング

トピックの新規投稿   返信


 
移動先:  

新規投稿: 不可
返信: 不可t
自分の記事の編集: 不可
自分の記事の削除: 不可
投票への参加: 不可




Powered by phpBB
customized by phpspot.