C++ 具名要求:随机数引擎 (RandomNumberEngine)

< cpp‎ | named req
 
 
 

随机数引擎是函数对象,返回无符号整数值,它使得可能结果范围中的每个值拥有(理想的)相等概率。

任何随机数引擎亦为均匀随机位生成器 (UniformRandomBitGenerator) ,从而可能插入任何随机数分布,以获得随机数(正式而言是随机变量)。

要求

满足均匀随机位生成器 (UniformRandomBitGenerator) 的类型 E 会另外满足随机数引擎 (随机数引擎 (RandomNumberEngine) ) ,若给定

  • TE::result_type 所指名的类型
  • sT 类型值
  • eE 类型的非 const 值
  • vE 类型左值
  • xyE 类型的可能为 const 的值
  • q ,某满足种子序列 (SeedSequence) 的类型的左值
  • zunsigned long long 类型值
  • os ,输出流
  • is ,输入流

而下列表达式合法并拥有其指定的效果:

表达式 返回类型 要求
E() 创建引擎,其状态与所有其他默认构造的 E 类型引擎相同。
E(x) 创建引擎,其状态与 x 的相同。
E(s) 创建引擎,其初始状态为 s 所确定。
E(q) 创建引擎,其初始状态以单次调用 q.generate 确定。
e.seed() void 设置 e == E()
e.seed(s) void 设置 e == E(s)
e.seed(q) void 设置 e == E(q)
e() T 返回闭区间 [E::min(), E::max()] 中的值。拥有均摊常数复杂度。
e.discard(z) void e 的状态前进,如同通过 z 次连续调用 e()
x == y bool xy 在相同状态(满足将来对 x()y() 的重复调用将产生等同的数列)则为 true 。否则为 false
x != y bool !(x == y)
os << x decltype(os)& x 当前状态的文本表示写入 os 。输出中,相邻的数以一或多个空格字符分隔。若 os 的 fmtflags 未设为 ios_base::dec|ios_base::left ,则行为可能未定义。
is >> v decltype(is)& is 读取 v 当前状态的文本表示,满足若先前通过 os << x 写入该状态,则 x == v 。若 is 的 fmtflags 未设为 ios_base::dec ,则行为可能未定义。

标准库

下列标准库设施满足随机数引擎 (随机数引擎 (RandomNumberEngine) ) :

实现线性同余算法
(类模板)
实现梅森缠绕器算法
(类模板)
实现带进位减(一种延迟斐波那契)算法
(类模板)
舍弃随机数引擎的某些输出
(类模板)
将一个随机数引擎的输出打包为指定位数的块
(类模板)
以不同顺序发送一个随机数引擎的输出
(类模板)

下列标准库设施满足均匀随机位生成器 (UniformRandomBitGenerator) 但不满足随机数引擎 (随机数引擎 (RandomNumberEngine) ) :

使用硬件熵源的非确定随机数生成器
(类)