Module Random
: sigend
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.
Basicfunctionsvalinit : int->unit
Initialize the domain-local generator, using the argument as a seed. The same seed will always yield the
same sequence of numbers.
valfull_init : intarray->unit
Same as Random.init but takes more data as seed.
valself_init : unit->unit
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).
valbits : unit->int
Return 30 random bits in a nonnegative integer.
valint : int->intRandom.intbound returns a random integer between 0 (inclusive) and bound (exclusive). bound must be
greater than 0 and less than 2^30.
RaisesInvalid_argument if bound <= 0 or bound >= 2^30.
valfull_int : int->intRandom.full_intbound returns a random integer between 0 (inclusive) and bound (exclusive). bound may be
any positive integer.
If bound is less than 2^31, then Random.full_intbound yields identical output across systems with
varying int sizes.
If bound is less than 2^30, then Random.full_intbound is equal to Random.intbound .
If bound is at least 2^30 (on 64-bit systems, or non-standard environments such as JavaScript), then
Random.full_int returns a value whereas Random.int raises Invalid_argument .
Since 4.13
RaisesInvalid_argument if bound <= 0.
valint_in_range : min:int->max:int->intRandom.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 -2^31 <= min and max < 2^31), then int_in_range
yields identical output across systems with varying int sizes.
Since 5.2
RaisesInvalid_argument if min>max .
valint32 : Int32.t->Int32.tRandom.int32bound returns a random integer between 0 (inclusive) and bound (exclusive). bound must be
greater than 0.
RaisesInvalid_argument if bound <= 0.
valint32_in_range : min:int32->max:int32->int32Random.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 .
Since 5.2
RaisesInvalid_argument if min>max .
valnativeint : Nativeint.t->Nativeint.tRandom.nativeintbound returns a random integer between 0 (inclusive) and bound (exclusive). bound must
be greater than 0.
RaisesInvalid_argument if bound <= 0.
valnativeint_in_range : min:nativeint->max:nativeint->nativeintRandom.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 .
Since 5.2
RaisesInvalid_argument if min>max .
valint64 : Int64.t->Int64.tRandom.int64bound returns a random integer between 0 (inclusive) and bound (exclusive). bound must be
greater than 0.
RaisesInvalid_argument if bound <= 0.
valint64_in_range : min:int64->max:int64->int64Random.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 .
Since 5.2
RaisesInvalid_argument if min>max .
valfloat : float->floatRandom.floatbound 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.
valbool : unit->boolRandom.bool() returns true or false with probability 0.5 each.
valbits32 : unit->Int32.tRandom.bits32() returns 32 random bits as an integer between Int32.min_int and Int32.max_int .
Since 4.14
valbits64 : unit->Int64.tRandom.bits64() returns 64 random bits as an integer between Int64.min_int and Int64.max_int .
Since 4.14
valnativebits : unit->Nativeint.tRandom.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
Advancedfunctions
The functions from module Random.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.
moduleState:sigendvalget_state : unit->State.tget_state() returns a fresh copy of the current state of the domain-local generator (which is used by the
basic functions).
valset_state : State.t->unitset_states updates the current state of the domain-local generator (which is used by the basic
functions) by copying the state s into it.
valsplit : unit->State.t
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 .
Since 5.0
OCamldoc 2025-06-12 Random(3o)