2017-10-01 14 views
2

PHP rand(min, max)〜1と9999は4桁の数字のほぼ90%が4桁の結果を示します。ですから、1000回実行した場合、約90%が4桁になるでしょう。PHP乱数INTの結果が均等に分布しています

1から9999までのランダムINTを生成する方法はありますか?出力番号は手動で行うことなく1,2,3または4桁の数字を持つ可能性がありますか?それを手動で行うことにより

は、私はこのような意味:私はそれを千回を実行したのであれば

$digits = rand(1, 4); 
$num = ''; 

for($i = 0; $i < $digits; $i++){ 
    $num .= rand(0, 9); 
} 

$final = intval($num); 
+1

を私はあなたが下の数字に向けて意志バイアス結果を行うことを計画しているかということを指摘したいと思います。たとえば、9000の4桁の数字、900の3桁の数字、90桁の2桁の数字、0から9999の数字の10桁の数字があります。提案する内容は、0〜9が時間の25%を表示します... – serakfalcon

答えて

4

、それらのおよそ〜90%が、おそらく4桁の数字を持っています。

これはまさに一様な分布の仕組みです。あなたが何をしているのかはボックス機能では分かりませんので、いくつかの統計的な魔法を作らなければなりません。

私が考えているのは、0と1の間の乱数を生成することです.0と.25の間にあれば、0と9の間に別の乱数を生成します.25と.5の間にあれば、 10と99との間の数字など、などとすることができる。それから、あなたはそれぞれの大きさの桁違いを得るチャンスが1/4になります。

これよりも少ないので、これは明らかに低い数字に向かって偏りがあります。たとえば、1は25%/10 = 2.5%チャンス、1001は25%/8998 = 0.00277%チャンスです。それはこのような何か行くと思い

<?php 
$initial = rand(0, 100)/100; 
if ($initial < .25) { 
    $random = rand(0, 9); 
} 
elseif ($initial < .5) { 
    $random = rand(10, 99); 
} 
elseif ($initial < .75) { 
    $random = rand(100, 999); 
} 
elseif ($initial >= .75) { 
    $random = rand(1000, 9999); 
} 
var_dump($random); 

Demo

+0

なぜこれが低い数字に偏っているのかを詳しく説明できますか? $ initialがランダムであれば1000イテレーション後、$ initialは0〜0.25、〜250回、25〜25、〜250回、5〜75、〜250回、75〜 – nick

+0

自転車を作っていますか? – soft87

+0

ああ、私は今、ええ、これは意図された機能です、ありがとう! – nick

関連する問題