ボックスミューラー法の凄さを実感してみようの回。

いや、何となく書いたので。

use Strict; use Benchmark; use Math::Random::MT qw(srand rand); use Math::Trig; # N(0,1)を作る。 my $N1 = 100000; #乱数を作る回数 my $N2 = 12; #中心極限定理 srand(1); # 中心極限定理 my $t0 = new Benchmark; foreach (1 .. $N1){ my $current = 0; foreach (1 .. $N2){ $current = $current + rand(1); } my $rand = $current - 6; #12個足して6を引く } my $t1 = new Benchmark; my $td = timediff($t1, $t0); print "the code took:", timestr($td),"

"; # ボックス・ミューラー法 my $t2 = new Benchmark; foreach (1 .. $N1){ my $alpha = rand(1); my $beta = rand(1); my $rand1 = sqrt(-2 * log($alpha)) * sin(2 * pi * $beta); my $rand2 = sqrt(-2 * log($beta)) * sin(2 * pi * $alpha); } my $t3 = new Benchmark; my $td = timediff($t3, $t2); print "the code took:", timestr($td),"

";