Legend:
Library
Module
Module type
Parameter
Class
Class type
This is a slightly modified version of the OCaml standard library's random.mli. We want Base's Random module to be different from OCaml's standard one:
We expose Random.State.default, so that user code can easily share the default random state if it wants.
We disallow Random.get_state, because it misleadingly makes a copy of random state. And it is what people naturally, albeit incorrectly, grab for when they want to use shared random state.
The fact that we construct our own default random state means that code using Core.Random and code using OCaml's Random will not share the default state.
Pseudo-random number generators (PRNG).
Basic functions
Note that all of these "basic" functions mutate a global random state.
val init : int -> unit
Initialize the generator, using the argument as a seed. The same seed will always yield the same sequence of numbers.
val self_init : ?allow_in_tests:bool ->unit -> unit
Initialize the generator with a more-or-less random seed chosen in a system-dependent way. By default, self_init is disallowed in inline tests, as it's often used for no good reason and it just creates non deterministic failures for everyone. Passing ~allow_in_tests:true removes this restriction in case you legitimately want non-deterministic values, like in Filename.temp_dir.
val bits : unit -> int
Return 30 random bits in a nonnegative integer.
before3.12.0
used a different algorithm (affects all the following functions)
val int : int -> int
Random.int bound returns a random integer between 0 (inclusive) and bound (exclusive). bound must be greater than 0.
val int32 : int32 -> int32
Random.int32 bound returns a random integer between 0 (inclusive) and bound (exclusive). bound must be greater than 0.
val nativeint : nativeint -> nativeint
Random.nativeint bound returns a random integer between 0 (inclusive) and bound (exclusive). bound must be greater than 0.
val int64 : int64 -> int64
Random.int64 bound returns a random integer between 0 (inclusive) and bound (exclusive). bound must be greater than 0.
val float : float -> float
Random.float bound returns a random floating-point number between 0 (inclusive) and bound (exclusive). 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.
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.