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。
bound
<= 0 或 bound
>= 230,則引發 Invalid_argument
。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
。
bound
<= 0,則引發 Invalid_argument
。val int_in_range : min:int -> max:int -> int
Random.int_in_range ~min ~max
傳回一個介於 min
(包含)和 max
(包含)之間的隨機整數。允許 min
和 max
皆為負數;min
必須小於或等於 max
。
如果兩個邊界都符合 32 位元帶符號整數(也就是說,如果 -231 <= min
和 max
< 231),則 int_in_range
在具有不同 int
大小的系統上會產生相同的輸出。
min > max
,則引發 Invalid_argument
。val int32 : Int32.t -> Int32.t
Random.int32 bound
傳回一個介於 0(包含)和 bound
(不包含)之間的隨機整數。bound
必須大於 0。
bound
<= 0,則引發 Invalid_argument
。val int32_in_range : min:int32 -> max:int32 -> int32
Random.int32_in_range ~min ~max
傳回一個介於 min
(包含)和 max
(包含)之間的隨機整數。允許 min
和 max
皆為負數;min
必須小於或等於 max
。
min > max
,則引發 Invalid_argument
。val nativeint : Nativeint.t -> Nativeint.t
Random.nativeint bound
傳回一個介於 0(包含)和 bound
(不包含)之間的隨機整數。bound
必須大於 0。
bound
<= 0,則引發 Invalid_argument
。val nativeint_in_range : min:nativeint -> max:nativeint -> nativeint
Random.nativeint_in_range ~min ~max
傳回一個介於 min
(包含)和 max
(包含)之間的隨機整數。允許 min
和 max
皆為負數;min
必須小於或等於 max
。
min > max
,則引發 Invalid_argument
。val int64 : Int64.t -> Int64.t
Random.int64 bound
傳回一個介於 0(包含)和 bound
(不包含)之間的隨機整數。bound
必須大於 0。
bound
<= 0,則引發 Invalid_argument
。val int64_in_range : min:int64 -> max:int64 -> int64
Random.int64_in_range ~min ~max
傳回一個介於 min
(包含)和 max
(包含)之間的隨機整數。允許 min
和 max
皆為負數;min
必須小於或等於 max
。
min > max
,則引發 Invalid_argument
。val float : float -> float
Random.float bound
傳回一個介於 0 和 bound
(包含)之間的隨機浮點數。如果 bound
為負數,則結果為負數或零。如果 bound
為 0,則結果為 0。
val bool : unit -> bool
Random.bool ()
傳回 true
或 false
,每個機率為 0.5。
val bits32 : unit -> Int32.t
Random.bits32 ()
以介於 Int32.min_int
和 Int32.max_int
之間的整數傳回 32 個隨機位元。
val bits64 : unit -> Int64.t
Random.bits64 ()
以介於 Int64.min_int
和 Int64.max_int
之間的整數傳回 64 個隨機位元。
val nativebits : unit -> Nativeint.t
Random.nativebits ()
以介於 Nativeint.min_int
和 Nativeint.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
。