模块 Random

module Random: sig .. end

伪随机数生成器 (PRNG)。

使用多个域,每个域都有自己的生成器,该生成器独立于其他域的生成器发展。创建域时,其生成器通过拆分与父域关联的生成器的状态来初始化。

相反,一个域内的所有线程共享同一个域本地生成器。可以使用 Random.split 函数创建独立的生成器,并与 Random.State 模块中的函数一起使用。


基本函数

val init : int -> unit

使用参数作为种子初始化域本地生成器。相同的种子将始终产生相同的数字序列。

val full_init : int array -> unit

Random.init 相同,但将更多数据作为种子。

val self_init : unit -> unit

使用以系统相关方式选择的随机种子初始化域本地生成器。如果主机上可用 /dev/urandom,则使用它来提供高度随机的初始种子。否则,将根据系统参数(当前时间、进程 ID、域本地状态)计算不太随机的种子。

val bits : unit -> int

在非负整数中返回 30 个随机位。

val int : int -> int

Random.int bound 返回介于 0(含)和 bound(不含)之间的随机整数。bound 必须大于 0 且小于 230

val full_int : int -> int

Random.full_int bound 返回介于 0(含)和 bound(不含)之间的随机整数。bound 可以是任何正整数。

如果 bound 小于 231,则 Random.full_int bound 在具有不同 int 大小的系统上产生相同的输出。

如果 bound 小于 230,则 Random.full_int bound 等于 Random.int bound

如果 bound 至少为 230(在 64 位系统或非标准环境(如 JavaScript)上),则 Random.full_int 返回一个值,而 Random.int 则引发 Invalid_argument

val int_in_range : min:int -> max:int -> int

Random.int_in_range ~min ~max 返回介于 min(含)和 max(含)之间的随机整数。minmax 都允许为负数;min 必须小于或等于 max

如果两个边界都适合 32 位有符号整数(即,如果 -231 <= minmax < 231),则 int_in_range 在具有不同 int 大小的系统上产生相同的输出。

val int32 : Int32.t -> Int32.t

Random.int32 bound 返回介于 0(含)和 bound(不含)之间的随机整数。bound 必须大于 0。

val int32_in_range : min:int32 -> max:int32 -> int32

Random.int32_in_range ~min ~max 返回介于 min(含)和 max(含)之间的随机整数。minmax 都允许为负数;min 必须小于或等于 max

val nativeint : Nativeint.t -> Nativeint.t

Random.nativeint bound 返回介于 0(含)和 bound(不含)之间的随机整数。bound 必须大于 0。

val nativeint_in_range : min:nativeint -> max:nativeint -> nativeint

Random.nativeint_in_range ~min ~max 返回介于 min(含)和 max(含)之间的随机整数。minmax 都允许为负数;min 必须小于或等于 max

val int64 : Int64.t -> Int64.t

Random.int64 bound 返回介于 0(含)和 bound(不含)之间的随机整数。bound 必须大于 0。

val int64_in_range : min:int64 -> max:int64 -> int64

Random.int64_in_range ~min ~max 返回介于 min(含)和 max(含)之间的随机整数。minmax 都允许为负数;min 必须小于或等于 max

val float : float -> float

Random.float bound 返回介于 0 和 bound(含)之间的随机浮点数。如果 bound 为负数,则结果为负数或零。如果 bound 为 0,则结果为 0。

val bool : unit -> bool

Random.bool () 返回 truefalse,概率各为 0.5。

val bits32 : unit -> Int32.t

Random.bits32 () 返回 32 个随机位,作为一个介于 Int32.min_intInt32.max_int 之间的整数。

val bits64 : unit -> Int64.t

Random.bits64 () 返回 64 个随机位,作为一个介于 Int64.min_intInt64.max_int 之间的整数。

val nativebits : unit -> Nativeint.t

Random.nativebits () 返回 32 或 64 个随机位(取决于平台的位宽),作为一个介于 Nativeint.min_intNativeint.max_int 之间的整数。

高级函数

Random.State 模块中的函数显式地操作随机生成器的当前状态。这允许使用一个或多个确定性 PRNG,即使在多线程程序中,也不会受到程序其他部分的干扰。

module State: sig .. end
val get_state : unit -> State.t

get_state() 返回域本地生成器当前状态的新副本(默认函数使用该状态)。

val set_state : State.t -> unit

set_state s 通过将状态 s 复制到其中来更新域本地生成器的当前状态(默认函数使用该状态)。

val split : unit -> State.t

从默认函数使用的域本地生成器的当前状态中提取一个新的 PRNG 状态。(域本地生成器的状态已修改。)参见 Random.State.split