Legend:
Library
Module
Module type
Parameter
Class
Class type

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 the Splittable_random library 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

Creates a new state and initializes it with the given seed.

val make_self_init : ?allow_in_tests:bool -> unit -> t

Creates a new state and initializes it with a system-dependent low-entropy seed.

val copy : t -> t

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 bits : t -> int
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