32.正規分布
こんな乱数が欲しい!
AS3ならでは、というお話でもないのですが、、、
ASをいじっていると、たまに平均がμ、標準偏差がσになる乱数を得たいって時があるでしょ?
え?ない?私はあるんですっ!
ということで、ここではそういう乱数を得る方法をメモします。
正規分布って何だっけ?
ありましたね、正規分布って。
あの、平均値のところでピークをもつつりがね状の確率分布を示すあれです(画像はWikipediaより)。

平均±σの範囲内に全体の約68%が入る、とか±2σだと約95%が入る、なんてのもありましたよね。
単に乱数を発生させた場合
正規分布の前に、普通にMath.random()で0〜1の乱数を生成した時どうなるか見てみましょう。
グラフ右のボタンで開始します。
グラフは0.1区切りでその分布を記録しています。つまり一番左の棒は0〜0.1、その次は0.1〜0.2に入った個数を示すことになります。
いかがですか?その分布はほとんど平らになるでしょ?え?ならない?平らになるまで待ってください!
正規分布
では次に平均0.5、σ=0.2となるような乱数を発生させた場合の分布です。
つりがね状になりましたか?え?ならない?つりがね状になるまで、、、(以下略)。
乱数発生部分のコードはこんな感じで。
一度に2つ生成できます(r1とr2)が、ここではどちらか1つを乱数で選んでおり、最終的にrnに入ります。
t=Math.sqrt(-2.0 * Math.log(1-Math.random()));
u=2*Math.PI*Math.random();
r1=sd*t*Math.cos(u)+average;
r2=sd*t*Math.sin(u)+average;
if (Math.random() >0.5) {
rn=r1;
}else{
rn=r2;
}