2.9 偏りのある乱数を生成する
生成される値の分布を不均一にしたい。
# 標準偏差1, 平均0の正規分布に従った乱数を生成する方法 sub gaussian_rand { my ($u1, $u2); # 均等に分布した乱数 my $w; # 偏差(重み) my ($g1, $g2); # ガウス分布の数値 do { $u1 = 2 * rand() -1; $u2 = 2 * rand() -1; $w = $u1*$u1 + $u2*$u2; } while ($w >= 1 || $w == 0); $w = sqrt ( (-2 * log($w) ) / $w ); $g2 = $u1 * $w; $g1 = $u2 * $w; # 呼び出し側の要求に従い、両方の値を返すか、1つの値を返す。 return wantarray ? ($g1, $g2) : $g1; }