Library
Module
Module type
Parameter
Class
Class type
This library includes OCaml implementation of some pseudorandom number generators (PRNGs) designed by David Blackman and Sebastiano Vigna behind an interface that mimmics that of the Random
module of the standard library.
The Xoshiro generators (for XOR/shift/rotate) are all-purpose generators (not cryptographically secure). Compared to the standard library, they:
xoshiro256++
/xoshiro256**
generators have a period of 2²⁵⁶-1.xoshiro256++
/xoshiro256**
pass the whole BigCrush test suite while the Random
module of the standard library systematically fails some of the tests.This module and all the variants (see below) are drop-in replacements of the Random
module of the standard library. This means you can use Xoshiro
everywhere where you would use Random
. For instance:
Xoshiro.bits
instead of Random.bits
int
, bool
, etc. and also for the State
submodule)open Xoshiro
instead of open Random
module Random = Xoshiro
at the beginning of every file.David Blackman and Sebastiano Vigna present several variants of their generators depending on the state size and implementation details.
module Xoshiro256plusplus : sig ... end
The module Xoshiro
includes by default an implementation of Xoshiro256plusplus
.
include module type of Xoshiro256plusplus
include MakeRandom.Sig.Full
Initialize the generator, using the argument as a seed. The same seed will always yield the same sequence of numbers.
Same as init
but takes more data as seed.
Initialize the 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).
include MakeRandom.Sig.Basic
int bound
returns a random integer between 0 (inclusive) and bound
(exclusive). bound
must be greater than 0 and less than 230.
int32 bound
returns a random integer between 0 (inclusive) and bound
(exclusive). bound
must be greater than 0.
val nativeint : Nativeint.t -> Nativeint.t
nativeint bound
returns a random integer between 0 (inclusive) and bound
(exclusive). bound
must be greater than 0.
int64 bound
returns a random integer between 0 (inclusive) and bound
(exclusive). bound
must be greater than 0.
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.
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.
module State : sig ... end
val get_state : unit -> State.t
Return the current state of the generator used by the basic functions.
val set_state : State.t -> unit
Set the state of the generator used by the basic functions.
Direct bindings of the functions provided in the original implementation.
module LowLevel : sig ... end
module Splitmix64 : MakeRandom.Sig.Full