Skip to content
master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 

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

About

random class à la java.util.Random

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Other 100.0%