random class à la java.util.Random
Perl6
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
Permalink
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

README.md

Math::Random

Random numbers à la java.util.Random.

Background

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!

Synopsis

use Math::Random::JavaStyle; # uses same mechanics as
                             # java.util.Random
my $j = Math::Random::JavaStyle.new;
$j.setSeed(9001);
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;
# ...

Usage

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.

nextInt

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.

nextLong

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.

nextBoolean

Returns True or False.

nextDouble

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

nextDouble(Num $max)

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

nextGaussian

Returns a random value according to the normal distribution.

nxt(Int $bits)

Returns a random integer with $bits bits.

Acknowledgements

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

Todo

  • 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...