查看源代码 random (stdlib v6.2)
伪随机数生成。
此模块提供一个随机数生成器。该方法归功于 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/0
或 uniform/1
,则会自动调用 seed/0
。
该实现在 Erlang/OTP R15 中发生了更改。升级到 R15 会破坏期望为指定种子产生特定输出的应用程序。输出仍然是确定性的数字序列,但与 R15 之前的版本相比有所不同。例如,种子 {0,0,0}
不再产生仅由零组成的错误序列。
摘要
函数
返回默认状态。
使用进程字典中的默认(固定)值播种随机数生成,并返回旧状态。
使用进程字典中的整数值播种随机数生成,并返回旧状态。
返回一个均匀分布在 0.0
和 1.0
之间的随机浮点数,并更新进程字典中的状态。
对于指定的整数 N >= 1
,返回一个均匀分布在 1
和 N
之间的随机整数,并更新进程字典中的状态。
对于指定的状态,返回一个均匀分布在 0.0
和 1.0
之间的随机浮点数,以及一个新状态。
对于指定的整数 N >= 1
和状态,返回一个均匀分布在 1
和 N
之间的随机整数,以及一个新状态。
类型
函数
-spec seed0() -> ran().
返回默认状态。
-spec seed() -> ran().
使用进程字典中的默认(固定)值播种随机数生成,并返回旧状态。
使用进程字典中的整数值播种随机数生成,并返回旧状态。
以下是获取唯一值进行播种的简单方法
random:seed(erlang:phash2([node()]),
erlang:monotonic_time(),
erlang:unique_integer())
有关详细信息,请参见 erlang:phash2/1
、 erlang:node/0
、erlang:monotonic_time/0
和 erlang:unique_integer/0
。
-spec uniform() -> float().
返回一个均匀分布在 0.0
和 1.0
之间的随机浮点数,并更新进程字典中的状态。
-spec uniform(N) -> pos_integer() when N :: pos_integer().
对于指定的整数 N >= 1
,返回一个均匀分布在 1
和 N
之间的随机整数,并更新进程字典中的状态。
对于指定的状态,返回一个均匀分布在 0.0
和 1.0
之间的随机浮点数,以及一个新状态。
-spec uniform_s(N, State0) -> {integer(), State1} when N :: pos_integer(), State0 :: ran(), State1 :: ran().
对于指定的整数 N >= 1
和状态,返回一个均匀分布在 1
和 N
之间的随机整数,以及一个新状态。