Math::Random

Random numbers à la java.util.Random

NAME

Math::Random - Random numbers à la java.util.Random

Background

I was bothered by Rakus'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;
#...

DESCRIPTION

Math::Random provides a Math::Random role, and two classes using this role: Math::Random::JavaStyle (which uses the same mechanics as java.util.Random), and Math::Random::MT (which provides a mersenne twister with a long period of 219937 – 1).

USAGE

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

method setSeed(Int:D $seed --> Nil) { ... }
method nxt(Int:D $bits --> Int:D) { ... }

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

METHODS

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

AUTHORS

  • +merlan #flirora

  • Raku Community

COPYRIGHT AND LICENSE

Copyright 2015 - 2017 +merlan #flirora

Copyright 2024 Raku Commuity

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.

Math::Random v0.1.3

Random numbers à la java.util.Random

Authors

  • +merlan #flirora
  • Raku Community

License

NOASSERTION

Dependencies

Test Dependencies

Provides

  • Math::Random
  • Math::Random::JavaStyle
  • Math::Random::MT

Documentation

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.