# Module BatRandom

    module BatRandom: sig .. end

Pseudo-random number generators (PRNG).

This module extends Stdlib's Random module, go there for documentation on the rest of the functions and types.
Author(s): Damien Doligez (base library), David Teller, Pierre Chambart

###### Basic functions

    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 full_init : int array -> unit

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

    val self_init : unit -> unit

Initialize the generator with a more-or-less random seed chosen in a system-dependent way.

    val bits : unit -> int

Return 30 random bits in a nonnegative integer.

    val int : int -> int

`Random.int bound` returns a random integer between 0 (inclusive) and `bound` (exclusive). `bound` must be greater than 0 and less than 230.

    val int32 : Int32.t -> Int32.t

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

    val nativeint : Nativeint.t -> Nativeint.t

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

    val int64 : Int64.t -> Int64.t

`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.

    val char : unit -> char

Return a random Latin-1 character.

    val full_range_int : unit -> int

`full_range_int ()` returns the maximum entropy possible in a single int: 31 bits on 32-bit platforms and 63 bits on 64-bit platforms. Intentionally gives different results on different platforms, so is not portable.

###### Enumerations of random values.

    val enum_bits : unit -> int BatEnum.t

    val enum_int : int -> int BatEnum.t

    val enum_bool : unit -> bool BatEnum.t

    val enum_float : float -> float BatEnum.t

    val enum_int32 : Int32.t -> Int32.t BatEnum.t

    val enum_int64 : Int64.t -> Int64.t BatEnum.t

    val enum_nativeint : Nativeint.t -> Nativeint.t BatEnum.t

    val enum_char : unit -> char BatEnum.t

###### Working with data structures.

    val choice : 'a BatEnum.t -> 'a

`choice e` returns a randomly-chosen element of `e`.

This function only works on finite enumerations with less than 230 elements.

    val multi_choice : int -> 'a BatEnum.t -> 'a BatEnum.t

`multi_choice n e` returns an enumeration of `n` randomly-chosen elements of `e`.

    val shuffle : 'a BatEnum.t -> 'a array

`shuffle e` returns a new array, containing the same set of elements as `e`, but in a random order.

Shuffling is implemented using the Fisher-Yates algorithm and works in O(n), where n is the number of elements of `e`.

This function only works on finite enumerations with less than 230 elements.

###### Advanced functions

    module State: sig .. end

Manipulate the current state of the random generator.

    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.

    module Incubator: sig .. end