Little Strange Software

スマホアプリの開発を行う LittleStrangeSoftware のブログです。

【JavaScript】乱数のテスト【実験】

 

 

 

 どうも!LSSです!!

 

 

f:id:little_strange:20210518221253p:plain

乱数のテスト

この記事の冒頭にある「テスト」ボタンを押すと、その下に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の解釈・実行はブラウザに委ねられている事から、環境が違うとまた違う結果になる可能性もあるかもですが。

 

 

 

ってなとこで、今回はこのへんで!

次回もまた、よろしくお願いします^^