Модуль Random
module Random: sig .. end
Генераторы псевдослучайных чисел (PRNG).
При наличии нескольких доменов у каждого домена есть собственный генератор, который развивается независимо от генераторов других доменов. При создании домена его генератор инициализируется разделением состояния генератора, связанного с родительским доменом.
В отличие от этого, все потоки внутри домена используют общий генератор, локальный для этого домена. Независимые генераторы можно создавать с помощью функции Random.split и использовать с функциями модуля Random.State.
- До 5.0 Для генерации случайных значений использовался другой алгоритм. Это затрагивает все функции этого модуля, возвращающие случайные значения.
Основные функции
val init : int -> unit
Инициализирует генератор, локальный для домена, используя аргумент в качестве начального значения. Одно и то же начальное значение всегда приводит к одной и той же последовательности чисел.
val full_init : int array -> unit
Аналогично Random.init, но для начального значения используется больше данных.
val self_init : unit -> unit
Инициализирует генератор, локальный для домена, случайным начальным значением, выбранным системно-зависимым способом. Если на хост-компьютере доступен криптографически стойкий генератор псевдослучайных чисел, он используется для получения начального значения с высокой степенью случайности. В противном случае менее случайное начальное значение вычисляется на основе системных параметров (текущего времени, идентификаторов процессов, состояния, локального для домена).
val bits : unit -> int
Возвращает 30 случайных бит в виде неотрицательного целого числа.
val int : int -> int
Random.int bound возвращает случайное целое число от 0 (включительно) до bound (не включительно). bound должно быть больше 0 и меньше 230.
-
Вызывает
Invalid_argument, еслиbound<= 0 илиbound>= 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.
- Начиная с версии 4.13
-
Вызывает
Invalid_argument, еслиbound<= 0.
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.
- Начиная с версии 5.2
-
Вызывает
Invalid_argument, еслиmin > max.
val int32 : Int32.t -> Int32.t
Random.int32 bound возвращает случайное целое число от 0 (включительно) до bound (не включительно). bound должно быть больше 0.
-
Вызывает
Invalid_argument, еслиbound<= 0.
val int32_in_range : min:int32 -> max:int32 -> int32
Random.int32_in_range ~min ~max возвращает случайное целое число от min (включительно) до max (включительно). min и max могут быть отрицательными; min должно быть меньше или равно max.
- Начиная с версии 5.2
-
Вызывает
Invalid_argument, еслиmin > max.
val nativeint : Nativeint.t -> Nativeint.t
Random.nativeint bound возвращает случайное целое число от 0 (включительно) до bound (не включительно). bound должно быть больше 0.
-
Вызывает
Invalid_argument, еслиbound<= 0.
val nativeint_in_range : min:nativeint -> max:nativeint -> nativeint
Random.nativeint_in_range ~min ~max возвращает случайное целое число от min (включительно) до max (включительно). min и max могут быть отрицательными; min должно быть меньше или равно max.
- Начиная с версии 5.2
-
Вызывает
Invalid_argument, еслиmin > max.
val int64 : Int64.t -> Int64.t
Random.int64 bound возвращает случайное целое число от 0 (включительно) до bound (не включительно). bound должно быть больше 0.
-
Вызывает
Invalid_argument, еслиbound<= 0.
val int64_in_range : min:int64 -> max:int64 -> int64
Random.int64_in_range ~min ~max возвращает случайное целое число от min (включительно) до max (включительно). min и max могут быть отрицательными; min должно быть меньше или равно max.
- Начиная с версии 5.2
-
Вызывает
Invalid_argument, еслиmin > max.
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 () возвращает 32 случайных бита в виде целого числа от Int32.min_int до Int32.max_int.
- Начиная с версии 4.14
val bits64 : unit -> Int64.t
Random.bits64 () возвращает 64 случайных бита в виде целого числа от Int64.min_int до Int64.max_int.
- Начиная с версии 4.14
val nativebits : unit -> Nativeint.t
Random.nativebits () возвращает 32 или 64 случайных бита (в зависимости от разрядности платформы) в виде целого числа от Nativeint.min_int до Nativeint.max_int.
- Начиная с версии 4.14
Дополнительные функции
Функции модуля Random.State позволяют явно управлять текущим состоянием генератора случайных чисел. Это позволяет использовать один или несколько детерминированных PRNG даже в многопоточной программе, не допуская их вмешательства со стороны других частей программы.
module State: sig .. end
val get_state : unit -> State.t
get_state() возвращает новую копию текущего состояния генератора, локального для домена (который используется основными функциями).
Текущее состояние не изменяется, а значит, случайные числа, полученные при нескольких вызовах get_state (), будут одинаковыми.
Чтобы получить новое состояние, которое не является общим, см. Random.State.make_self_init и Random.split.
val set_state : State.t -> unit
set_state s обновляет текущее состояние генератора, локального для домена (который используется основными функциями), копируя в него состояние s.
val split : unit -> State.t
Извлекает новое состояние PRNG из текущего состояния генератора, локального для домена, используемого функциями по умолчанию. (Состояние генератора, локального для домена, изменяется.) См. Random.State.split.
- Начиная с версии 5.0
© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/api/Random.html