module Random
Overview
Random
provides an interface for random values generation, using a pseudo random number generator (PRNG).
Random.new_seed # => 112705036
Random.rand # => 0.167595
Random.rand(5) # => 2
The above methods delegate to a Random
instance.
r = Random.new
r.rand # => 0.0372991
r.next_bool # => true
r.next_int # => 2223112
This module also defines a global method #rand
, which Array#sample
and Array#shuffle
delegates.
rand # => 0.293829
rand(10) # => 8
An instance of each class that includes Random
is a random number generator with its own state.
Usually such RNGs can be initialized with a seed, which defines their initial state. It is
guaranteed that after initializing two different instances with the same seed, and then executing
the same calls on both of them, you will get the same results. This allows exactly reproducing the
same seemingly random events by just keeping the seed.
It is possible to make a custom RNG by including Random
and implementing #next_u
to return an
unsigned number of a pre-determined type (usually UInt32
). The numbers generated by your RNG
must be uniformly distributed in the whole range of possible values for that type (e.g.
0u32..UInt32::MAX
). This allows all other methods of Random
to be based on this and still
produce uniformly distributed results. Your Random
class should also have a way to initialize
it. For pseudo-random number generators that will usually be an integer seed, but there are no
rigid requirements for the initialization.
Direct including types
Defined in:
random/mt19937.crrandom.cr
Constant Summary
-
DEFAULT =
MT19937.new
Class Method Summary
-
.new(seed = new_seed)
Initializes an instance with the given seed.
-
.new_seed : UInt32
Returns a
UInt32
read from a counter value generated by the cycle counter register, or the current time on ARM processors. -
.rand(x)
See
#rand(x)
. -
.rand : Float64
See
#rand
.
Instance Method Summary
-
#next_bool : Bool
Generates a random
Bool
. -
#next_float : Float64
See
#rand
. -
#next_int : Int32
Same as
#rand(Int32::MIN..Int32::MAX)
. -
#next_u : UInt
Generates a random unsigned integer.
-
#rand(max : Int) : Int
Generates a random integer which is greater than or equal to
0
and less than max. -
#rand(max : Float) : Float64
Returns a random
Float64
which is greater than or equal to0
and less than max. -
#rand(range : Range(Int, Int)) : Int
Returns a random integer in the given range.
-
#rand(range : Range(Float, Float)) : Float64
Returns a random
Float64
in the given range. -
#rand : Float64
Generates a random
Float64
between0
and1
.
Class Method Detail
Returns a UInt32
read from a counter value generated by the cycle counter
register, or the current time on ARM processors.
Instance Method Detail
Generates a random unsigned integer.
The integers must be uniformly distributed between 0
and
the maximal value for the chosen type.
Generates a random integer which is greater than or equal to 0
and less than max.
The return type always matches the supplied argument.
Random.new.rand(10) # => 5
Random.new.rand(5000) # => 2243
Returns a random Float64
which is greater than or equal to 0
and less than max.
Random.new.rand(3.5) # => 2.88938
Random.new.rand(10.725) # => 7.70147
Returns a random integer in the given range.
The return type always matches the supplied argument.
Random.new.rand(10..20) # => 14
Random.new.rand(Int64::MIN..Int64::MAX) # => -5297435808626736140
Returns a random Float64
in the given range.
Random.new.rand(6.2..21.768) # => 15.2989
Generates a random Float64
between 0
and 1
.
r = Random.new
r.rand # => 0.167595
r.rand # => 0.0372991