模組 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 () 以介於 Int32.min_intInt32.max_int 之間的整數傳回 32 個隨機位元。

val bits64 : unit -> Int64.t

Random.bits64 () 以介於 Int64.min_intInt64.max_int 之間的整數傳回 64 個隨機位元。

val nativebits : unit -> Nativeint.t

Random.nativebits () 以介於 Nativeint.min_intNativeint.max_int 之間的整數傳回 32 或 64 個隨機位元(取決於平台的位元寬度)。

進階函式

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