Stdlib.Random
SourcePseudo-random number generators (PRNG).
With multiple domains, each domain has its own generator that evolves independently of the generators of other domains. When a domain is created, its generator is initialized by splitting the state of the generator associated with the parent domain.
In contrast, all threads within a domain share the same domain-local generator. Independent generators can be created with the Random.split
function and used with the functions from the Random.State
module.
Initialize the domain-local generator, using the argument as a seed. The same seed will always yield the same sequence of numbers.
Same as Random.init
but takes more data as seed.
Initialize the domain-local generator with a random seed chosen in a system-dependent way. If /dev/urandom
is available on the host machine, it is used to provide a highly random initial seed. Otherwise, a less random seed is computed from system parameters (current time, process IDs, domain-local state).
Return 30 random bits in a nonnegative integer.
Random.int bound
returns a random integer between 0 (inclusive) and bound
(exclusive). bound
must be greater than 0 and less than 230.
Random.full_int bound
returns a random integer between 0 (inclusive) and bound
(exclusive). bound
may be any positive integer.
If bound
is less than 231, then Random.full_int bound
yields identical output across systems with varying int
sizes.
If bound
is less than 230, then Random.full_int bound
is equal to Random.int
bound
.
If bound
is at least 230 (on 64-bit systems, or non-standard environments such as JavaScript), then Random.full_int
returns a value whereas Random.int
raises Stdlib.Invalid_argument
.
Random.int_in_range ~min ~max
returns a random integer between min
(inclusive) and max
(inclusive). Both min
and max
are allowed to be negative; min
must be less than or equal to max
.
If both bounds fit in 32-bit signed integers (that is, if -231 <= min
and max
< 231), then int_in_range
yields identical output across systems with varying int
sizes.
Random.int32 bound
returns a random integer between 0 (inclusive) and bound
(exclusive). bound
must be greater than 0.
Random.int32_in_range ~min ~max
returns a random integer between min
(inclusive) and max
(inclusive). Both min
and max
are allowed to be negative; min
must be less than or equal to max
.
Random.nativeint bound
returns a random integer between 0 (inclusive) and bound
(exclusive). bound
must be greater than 0.
Random.nativeint_in_range ~min ~max
returns a random integer between min
(inclusive) and max
(inclusive). Both min
and max
are allowed to be negative; min
must be less than or equal to max
.
Random.int64 bound
returns a random integer between 0 (inclusive) and bound
(exclusive). bound
must be greater than 0.
Random.int64_in_range ~min ~max
returns a random integer between min
(inclusive) and max
(inclusive). Both min
and max
are allowed to be negative; min
must be less than or equal to max
.
Random.float bound
returns a random floating-point number between 0 and bound
(inclusive). If bound
is negative, the result is negative or zero. If bound
is 0, the result is 0.
Random.bool ()
returns true
or false
with probability 0.5 each.
Random.bits32 ()
returns 32 random bits as an integer between Int32.min_int
and Int32.max_int
.
Random.bits64 ()
returns 64 random bits as an integer between Int64.min_int
and Int64.max_int
.
Random.nativebits ()
returns 32 or 64 random bits (depending on the bit width of the platform) as an integer between Nativeint.min_int
and Nativeint.max_int
.
The functions from module State
manipulate the current state of the random generator explicitly. This allows using one or several deterministic PRNGs, even in a multi-threaded program, without interference from other parts of the program.
get_state()
returns a fresh copy of the current state of the domain-local generator (which is used by the basic functions).
set_state s
updates the current state of the domain-local generator (which is used by the basic functions) by copying the state s
into it.
Draw a fresh PRNG state from the current state of the domain-local generator used by the default functions. (The state of the domain-local generator is modified.) See Random.State.split
.