Module Base__.Random.State

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.

Note that Random.get_state from the standard library is not exposed, because it misleadingly makes a copy of random state, which is not typically the desired outcome for accessing the shared state.

Obtaining multiple generators with good independence properties is nontrivial; see Splittable_random in Core_kernel for that.

type t
val default : t

This gives access to the default random state, allowing user code to share (and thereby mutate) the random state used by the main functions in Random.

val make : int array ‑> t

Create a new state and initialize it with the given seed.

val make_self_init : ?⁠allow_in_tests:bool ‑> unit ‑> t

Create a new state and initialize it with a system-dependent low-entropy seed.

val copy : t ‑> t
val bits : t ‑> int

These functions are the same as the basic functions, except that they use (and update) the given PRNG state instead of the default one.

val int : t ‑> int ‑> int
val int32 : t ‑> int32 ‑> int32
val nativeint : t ‑> nativeint ‑> nativeint
val int64 : t ‑> int64 ‑> int64
val float : t ‑> float ‑> float
val int_incl : t ‑> int ‑> int ‑> int
val int32_incl : t ‑> int32 ‑> int32 ‑> int32
val nativeint_incl : t ‑> nativeint ‑> nativeint ‑> nativeint
val int64_incl : t ‑> int64 ‑> int64 ‑> int64
val float_range : t ‑> float ‑> float ‑> float
val bool : t ‑> bool