Legend:
Library
Module
Module type
Parameter
Class
Class type
Pseudo-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.
before5.0
Random value generation used a different algorithm. This affects all the functions in this module which return random values.
Basic functions
val init : int -> unit
Initialize the domain-local generator, using the argument as a seed. The same seed will always yield the same sequence of numbers.
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).
val bits : unit -> int
Return 30 random bits in a nonnegative integer.
val int : int -> int
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.
val int32_in_range : min:int32 ->max:int32 -> int32
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.
val nativeint_in_range : min:nativeint ->max:nativeint -> nativeint
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.
val int64_in_range : min:int64 ->max:int64 -> int64
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.
val bool : unit -> bool
Random.bool () returns true or false with probability 0.5 each.
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.
since 4.14
Advanced functions
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.
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.