use strict; use warnings; sub random_int { my ($low, $high) = @_; return int(rand($high - $low)) + $low; } sub random_gaussian { my $u1 = 0.0; my $u2 = 0.0; # Avoid log(0) while ($u1 == 0.0) { $u1 = rand(); } while ($u2 == 0.0) { $u2 = rand(); } return sqrt(-2.0 * log($u1)) * cos(2.0 * 3.141592653589793 * $u2); } print "Uniform integers in [1, 6]\n"; for (my $i = 0; $i < 10; ++$i) { print random_int(1, 7), "\n"; } print "Uniform floating point values in [0.0, 1.0)\n"; for (my $i = 0; $i < 10; ++$i) { print rand(), "\n"; } print "Standard Normal\n"; for (my $i = 0; $i < 10; ++$i) { print random_gaussian(), "\n"; }