JavaScriptではMath.randomを使って乱数を発生させます。0から1までの間の数がランダムに返ります。発生の確率はどの数も同じなので一様乱数といいます。
一方で、ある値に偏った乱数がほしい場合があります。例えば20点満点のテストで平均点が10点で人数が最も多く、0点と20点は人数が少ないというような分布になるような乱数です。このような分布を正規分布といい、このように発生する乱数を正規乱数といいます。
正規乱数を発生させる最も簡単な方法は次の通りです。JavaScriptで書きました。
function random_norm() {
//平均0、標準偏差1の正規乱数を返す。
var s, i;
s = 0;
for(i = 0; i < 12; i++) {
s += Math.random();
}
return s - 6;
}
//平均0、標準偏差1の正規乱数を返す。
var s, i;
s = 0;
for(i = 0; i < 12; i++) {
s += Math.random();
}
return s - 6;
}
厳密には疑似正規乱数ですが、かなり正規分布に近い結果が出ます。
0から1までの一様乱数を12個出して合計します。これから6を引きます。
これだけで平均が0で標準偏差が1の疑似正規乱数になります。
12個というのがちょうどよく、これより多いと平均値に近い値が出やすくなり標準偏差が1より小さくなります。
例えば次のように使うと平均が10で標準偏差が3の疑似正規乱数になります。
r = random_norm();
v = 10 + r * 3;
v = 10 + r * 3;
先ほどの20点満点のテストで平均点が10点という正規分布になります。
コメント