random class à la java.util.Random
Switch branches/tags
Nothing to show
Latest commit 714b462 Oct 29, 2016 @bluebear94 committed on GitHub Merge pull request #1 from zoffixznet/patch-1
Add mandatory "perl" META field
Failed to load latest commit information.
lib/Math Add README.md and META.info Dec 1, 2015
META.info Add mandatory "perl" META field Oct 26, 2016
README.md Update PR Dec 1, 2015



Random numbers à la java.util.Random.


I was bothered by Perl 6's primitive random number handling (only rand and srand, with no mechanism to have multiple generators in parallel), so, instead of bugging some random people about it, I decided to write a module!


use Math::Random::JavaStyle; # uses same mechanics as
                             # java.util.Random
my $j = Math::Random::JavaStyle.new;
say $j.nextInt;
say $j.nextLong;
say $j.nextDouble;
say $j.nextInt(100);
say $j.nextLong(100_000_000_000);
say $j.nextDouble(100);
say $j.nxt(256); # generate a random 256-bit integer
say $j.nextGaussian;
use Math::Random::MT;
my $m64 = Math::Random::MT.mt19937_64;
# ...


The Math::Random role requires two methods to be implemented:

method setSeed(Int $seed) { ... }
method nxt(Int $bits) returns Int { ... }

Unlike in Java's equivalent, nxt is required to accept as large of an input as possible.

setSeed(Int $seed)

Sets the random seed.


Returns a random unsigned 32-bit integer.

nextInt(Int $max)

Returns a random nonnegative integer less than $max.

The upper bound must not exceed 2**32.


Returns a random unsigned 64-bit integer.

nextLong(Int $max)

Returns a random nonnegative integer less than $max.

The upper bound must not exceed 2**64.


Returns True or False.


Returns a random Num in the range [0.0, 1.0).

nextDouble(Num $max)

Returns a random Num in the range [0.0, $max).


Returns a random value according to the normal distribution.

nxt(Int $bits)

Returns a random integer with $bits bits.


Oracle's documentation on java.util.Random, as well as Wikipedia's article on the Mersenne Twister generator.


  • Provide constructors that also set the seed.
  • Ensure thread safety, or create a thread-safe wrapper
  • Provide higher-level methods
  • Tests? They won't be easy to pull off, so if anyone wants to PR...