在线文档教程
Erlang 20

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/1erlang:node/0erlang: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/0uniform/1不先设置种子,seed/0则会自动调用。

Erlang/OTP R15中的实现发生了变化。升级到R15会中断针对指定种子的特定输出的应用程序。输出仍然是确定性的数字序列,但与R15之前的版本相比有所不同。{0,0,0}例如,种子不会再产生一系列只有零的缺陷。