查看源代码 random (stdlib v6.2)

此模块已弃用。请改用模块 'rand'。

伪随机数生成。

此模块提供一个随机数生成器。该方法归功于 B.A. Wichmann 和 I.D. Hill 在“一种高效且可移植的伪随机数生成器”中提出的,发表于《应用统计学杂志》。AS183。1982 年。同时见 1987 年 3 月的 Byte 杂志。

该算法是对标准 Prolog 库中归功于 Richard A. O'Keefe 的版本的修改。

每次请求随机数时,都会使用一个状态来计算它,并生成一个新的状态。该状态可以是隐式的(保存在进程字典中)或显式的参数和返回值。在此实现中,该状态(类型为 ran/0)由三个整数组成的元组构成。

注意

此随机数生成器不具有密码学上的强度。如果需要强大的密码学随机数生成器,请使用 crypto 模块中的一个函数,例如,crypto:strong_rand_bytes/1

注意

应使用改进的 rand 模块来代替此模块。

注意

某些函数使用进程字典变量 random_seed 来记住当前种子。

如果进程在没有先设置种子的情况下调用 uniform/0uniform/1,则会自动调用 seed/0

该实现在 Erlang/OTP R15 中发生了更改。升级到 R15 会破坏期望为指定种子产生特定输出的应用程序。输出仍然是确定性的数字序列,但与 R15 之前的版本相比有所不同。例如,种子 {0,0,0} 不再产生仅由零组成的错误序列。

摘要

类型

状态。

函数

seed0() 已弃用

返回默认状态。

seed() 已弃用

使用进程字典中的默认(固定)值播种随机数生成,并返回旧状态。

seed(A1, A2, A3) 已弃用

使用进程字典中的整数值播种随机数生成,并返回旧状态。

uniform() 已弃用

返回一个均匀分布在 0.01.0 之间的随机浮点数,并更新进程字典中的状态。

uniform(N) 已弃用

对于指定的整数 N >= 1,返回一个均匀分布在 1N 之间的随机整数,并更新进程字典中的状态。

对于指定的状态,返回一个均匀分布在 0.01.0 之间的随机浮点数,以及一个新状态。

对于指定的整数 N >= 1 和状态,返回一个均匀分布在 1N 之间的随机整数,以及一个新状态。

类型

-type ran() :: {integer(), integer(), integer()}.

状态。

函数

此函数已弃用。random:seed0/0 已弃用;请改用 'rand' 模块。
-spec seed0() -> ran().

返回默认状态。

此函数已弃用。random:seed/0 已弃用;请改用 'rand' 模块。
-spec seed() -> ran().

使用进程字典中的默认(固定)值播种随机数生成,并返回旧状态。

此函数已弃用。random:seed/1 已弃用;请改用 'rand' 模块。
-spec seed(SValue) -> undefined | ran()
              when SValue :: {A1, A2, A3} | integer(), A1 :: integer(), A2 :: integer(), A3 :: integer().

seed({A1, A2, A3}) 等效于 seed(A1, A2, A3)

此函数已弃用。random:seed/3 已弃用;请改用 'rand' 模块。
-spec seed(A1, A2, A3) -> undefined | ran() when A1 :: integer(), A2 :: integer(), A3 :: integer().

使用进程字典中的整数值播种随机数生成,并返回旧状态。

以下是获取唯一值进行播种的简单方法

random:seed(erlang:phash2([node()]),
            erlang:monotonic_time(),
            erlang:unique_integer())

有关详细信息,请参见 erlang:phash2/1erlang:node/0erlang:monotonic_time/0erlang:unique_integer/0

此函数已弃用。random:uniform/0 已弃用;请改用 'rand' 模块。
-spec uniform() -> float().

返回一个均匀分布在 0.01.0 之间的随机浮点数,并更新进程字典中的状态。

此函数已弃用。random:uniform/1 已弃用;请改用 'rand' 模块。
-spec uniform(N) -> pos_integer() when N :: pos_integer().

对于指定的整数 N >= 1,返回一个均匀分布在 1N 之间的随机整数,并更新进程字典中的状态。

此函数已弃用。random:uniform_s/1 已弃用;请改用 'rand' 模块。
-spec uniform_s(State0) -> {float(), State1} when State0 :: ran(), State1 :: ran().

对于指定的状态,返回一个均匀分布在 0.01.0 之间的随机浮点数,以及一个新状态。

此函数已弃用。random:uniform_s/2 已弃用;请改用 'rand' 模块。
-spec uniform_s(N, State0) -> {integer(), State1}
                   when N :: pos_integer(), State0 :: ran(), State1 :: ran().

对于指定的整数 N >= 1 和状态,返回一个均匀分布在 1N 之间的随机整数,以及一个新状态。