どうも!LSSです!!
乱数のテスト
この記事の冒頭にある「テスト」ボタンを押すと、その下に10×10、100個のボックスが出てきます。
中には数字が入っていて、赤っぽい色になっています。
これは、以下の手順で生成しています。
まず、100個の配列変数を全て0にする。
- Math.floor(Math.random()*100)で「0」から「99」の範囲での乱数を生成し
- 配列変数の添え字が上記の乱数に当たるものを+1します
- 例えば乱数の結果が0なら、1つめの配列変数が。34なら35番目の配列変数が増加します
- これを、「増加させた結果、その配列変数の値が255に達する」まで繰り返します
その100個の配列変数の値に応じて、100個のボックスを作ります。
数が少ないほど赤っぽく、数が多いと白っぽくなります。(255に達したものは真っ白)
また、100個の数値のうち、一番小さかった数値を下に表示します。
もし乱数が偏っていたら?
何度か「テスト」ボタンを押してみて「最小値」があまりに低すぎるなら、抽選に漏れやすい箇所があった、という疑いがあります。
また「赤っぽさ・白っぽさ」で視覚的に分布が分かりやすいようにしていますが、もしこれが「テストボタンを押しても、いつも特定の箇所が赤く・白くなる」場合にも偏りがあるという疑いが出てきます。
テスト結果
Windows10+GoogleChromeの環境下で何度か試してみました。
最小値は少ない時で160ぐらいになりましたが、理論上の最小値が0であり、100個のうちいずれかが255に達した時点での数値としては、問題視する必要のない数値かと。
また、赤白の配置も、特に毎回似た模様になる、なんて事もないようです^^
今回のテストに使用したコード
<style><!--
.sp{width:20px;height:20px;border:1px solid #ff0000;}
--></style>
<p><input id="tbtn" type="button" value="テスト" /></p>
<div id="gamen"> </div>
<p>
<script>// <![CDATA[
tbtn.addEventListener('click',rtest,false);
cnt=[];
function rtest(){
flg=false;
for(i=0;i<100;i++){cnt[i]=0;}
do{
a=Math.floor(Math.random()*100);
cnt[a]++;
if(cnt[a]>=255){flg=true;}
}while(!flg);
txt='';
for(i=0;i<100;i++){
txt+='<span id="s'+i+'" class="sp" style="background-color:rgb(255,'+cnt[i]+','+cnt[i]+');">'+cnt[i]+'</span>'+(i%10==9?'<br/>':'');
}
txt+='最小値は '+Math.min.apply(null,cnt);
gamen.innerHTML=txt;
}
// ]]></script>
あとがき
0~99まで、という場合に限った話ではありますが、特に問題なさそうな感じでした。
…とはいえ、JavaScriptの解釈・実行はブラウザに委ねられている事から、環境が違うとまた違う結果になる可能性もあるかもですが。
ってなとこで、今回はこのへんで!
次回もまた、よろしくお願いします^^