random
random
模块
随机
模块摘要
伪随机数生成
描述
该模块提供了一个随机数字发生器。该方法归因于BA Wichmann和ID Hill在'An efficient and portable pseudo-random number generator',Journal of Applied Statistics中。AS183。还有1987年3月的字节。
该算法是对标准Prolog库中归因于Richard A. O'Keefe的版本的修改。
每次请求一个随机数时,会使用一个状态来计算它,并产生一个新状态。该状态可以是隐式的(保存在进程字典中),也可以是显式的参数和返回值。在这个实现中,状态(类型ran()
)由三个整数的元组组成。
注
这个随机数发生器不具有密码强度。例如,如果需要强大的加密随机数生成器,请使用crypto
模块中的一个函数crypto:strong_rand_bytes/1
。
注
改进的rand
模块将被用来代替这个模块。
数据类型
ran() = {integer(), integer(), integer()}
国家。
出口
seed() -> ran()
在进程字典中用默认(固定)值生成随机数生成并返回旧状态。
seed(SValue) -> undefined | ran()
类型
seed{A1, A2, A3})相
当于seed(A1, A2, A3)。
seed(A1, A2, A3) -> undefined | 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
。
seed0() -> ran()
返回默认状态。
uniform() -> float()
返回在0.0
和之间均匀分布的随机float,并1.0
更新流程字典中的状态。
uniform(N) -> integer() >= 1
类型
对于指定的整数N >= 1,返回在1和之间均匀分布的随机整数,并N更新流程字典中的状态。
uniform_s(State0) -> {float(), State1}
类型
对于指定的状态,返回在0.0
和之间均匀分布的随机float 1.0
,以及新状态。
uniform_s(N, State0) -> {integer(), State1}
类型
对于指定的整数N >= 1和状态,返回在1和之间均匀分布的随机整数N以及新状态。
注
一些函数使用进程字典变量random_seed
来记住当前种子。
如果进程调用uniform/0
或uniform/1
不先设置种子,seed/0
则会自动调用。
Erlang/OTP R15中的实现发生了变化。升级到R15会中断针对指定种子的特定输出的应用程序。输出仍然是确定性的数字序列,但与R15之前的版本相比有所不同。{0,0,0}
例如,种子不会再产生一系列只有零的缺陷。