Stdlib.Random(3) OCaml library Stdlib.Random(3)

# [NAME](#NAME)

Stdlib.Random - no description

# [Module](#Module)

Module Stdlib.Random

# [Documentation](#Documentation)

Module **Random**  
: **(module Stdlib\_\_Random)**

## [Basic functions](#Basic_functions)

*val init* : **int -&gt; unit**

Initialize the domain-local generator, using the argument as a seed. The same seed will always yield the same sequence of numbers.

*val full\_init* : **int array -&gt; unit**

Same as **Random.init** but takes more data as seed.

*val self\_init* : **unit -&gt; unit**

Initialize the domain-local generator with a random seed chosen in a system-dependent way. If a cryptographically secure pseudorandom number generator 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 -&gt; int**

Return 30 random bits in a nonnegative integer.

*val int* : **int -&gt; int**

**Random.int bound** returns a random integer between 0 (inclusive) and **bound** (exclusive). **bound** must be greater than 0 and less than 2^30.

**Raises Invalid\_argument** if **bound** &lt;= 0 or **bound** &gt;= 2^30.

*val full\_int* : **int -&gt; int**

**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 2^31, then **Random.full\_int bound** yields identical output across systems with varying **int** sizes.

If **bound** is less than 2^30, then **Random.full\_int bound** is equal to **Random.int** **bound** .

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

**Raises Invalid\_argument** if **bound** &lt;= 0.

*val int\_in\_range* : **min:int -&gt; max:int -&gt; int**

**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 -2^31 &lt;= **min** and **max** &lt; 2^31), then **int\_in\_range** yields identical output across systems with varying **int** sizes.

**Since** 5.2

**Raises Invalid\_argument** if **min &gt; max** .

*val int32* : **Int32.t -&gt; Int32.t**

**Random.int32 bound** returns a random integer between 0 (inclusive) and **bound** (exclusive). **bound** must be greater than 0.

**Raises Invalid\_argument** if **bound** &lt;= 0.

*val int32\_in\_range* : **min:int32 -&gt; max:int32 -&gt; 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** .

**Since** 5.2

**Raises Invalid\_argument** if **min &gt; max** .

*val nativeint* : **Nativeint.t -&gt; Nativeint.t**

**Random.nativeint bound** returns a random integer between 0 (inclusive) and **bound** (exclusive). **bound** must be greater than 0.

**Raises Invalid\_argument** if **bound** &lt;= 0.

*val nativeint\_in\_range* : **min:nativeint -&gt; max:nativeint -&gt; 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** .

**Since** 5.2

**Raises Invalid\_argument** if **min &gt; max** .

*val int64* : **Int64.t -&gt; Int64.t**

**Random.int64 bound** returns a random integer between 0 (inclusive) and **bound** (exclusive). **bound** must be greater than 0.

**Raises Invalid\_argument** if **bound** &lt;= 0.

*val int64\_in\_range* : **min:int64 -&gt; max:int64 -&gt; 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** .

**Since** 5.2

**Raises Invalid\_argument** if **min &gt; max** .

*val float* : **float -&gt; float**

**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 -&gt; bool**

**Random.bool ()** returns **true** or **false** with probability 0.5 each.

*val bits32* : **unit -&gt; Int32.t**

**Random.bits32 ()** returns 32 random bits as an integer between **Int32.min\_int** and **Int32.max\_int** .

**Since** 4.14

*val bits64* : **unit -&gt; Int64.t**

**Random.bits64 ()** returns 64 random bits as an integer between **Int64.min\_int** and **Int64.max\_int** .

**Since** 4.14

*val nativebits* : **unit -&gt; Nativeint.t**

**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](#Advanced_functions)

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.

*module State :* **sig end**

*val get\_state* : **unit -&gt; State.t**

**get\_state()** returns a fresh copy of the current state of the domain-local generator (which is used by the basic functions).

The current state is unchanged, which means that random numbers generated from multiple calls to **get\_state ()** will be identical.

See **Random.State.make\_self\_init** and **Random.split** instead to obtain a fresh state that is not shared.

*val set\_state* : **State.t -&gt; unit**

**set\_state s** updates the current state of the domain-local generator (which is used by the basic functions) by copying the state **s** into it.

*val split* : **unit -&gt; 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

2026-09-04 OCamldoc

---

Document: Stdlib.Random(3o) from ocaml 5.5.1-r0 (Chainguard OS)
Source: https://github.com/ocaml/ocaml
