Namespaces
Variants

std::linear_congruential_engine<UIntType,a,c,m>:: linear_congruential_engine

From cppreference.net
linear_congruential_engine ( ) : linear_congruential_engine ( default_seed ) { }
(1) (C++11 起)
explicit linear_congruential_engine ( result_type value ) ;
(2) (C++11 起)
template < class SeedSeq >
explicit linear_congruential_engine ( SeedSeq & seq ) ;
(3) (C++11 起)
linear_congruential_engine ( const linear_congruential_engine & other ) ;
(4) (C++11 起)
(隐式声明)

构造伪随机数引擎。

1) 默认构造函数。
  • 若默认构造的引擎类型为 std::minstd_rand0 ,其第10000次连续调用的生成值为 1043618065
  • 若默认构造的引擎类型为 std::minstd_rand ,其第10000次连续调用的生成值为 399268537
2) 使用种子值 value 构造引擎。引擎的初始 状态 按以下方式确定:
  • c % m == 0 value % m == 0 均为 true ,则状态为 1
  • 否则,状态为 value % m
3) 使用种子序列 seq 构造引擎。给定 std:: size_t ( std:: log2 ( m ) / 32 ) + 1 作为 k ,引擎的初始 状态 按以下方式确定:
  1. 创建长度为 k + 3 的虚构数组对象 a
  2. 调用 seq. generate ( a + 0 , a + k + 3 )
  3. S (∑ k-1
    j=0
    a j+3 ·2 32j
    ) mod m
  4. c % m == 0 S == 0 均为 true ,则将引擎状态设为 1 ;否则将引擎状态设为 S
仅当 SeedSeq 满足 SeedSequence 要求时,此重载才会参与重载决议。
4) 复制构造函数。构造完成后, * this == other true

目录

参数

value - 用于初始化内部状态的种子值
seq - 用于初始化内部状态的种子序列

复杂度

1,2) 常量。
3) seq.generate 调用的复杂度相同。
4) 常量。

异常

3) 如果 SeedSeq 不是 std::seed_seq ,则抛出 seq.generate 调用所抛出的异常。

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 适用范围 发布时行为 正确行为
LWG 2181 C++11 重载 ( 3 ) 即使 seq.generate 调用抛出异常也不会抛出 传播该异常
P0935R0 C++11 默认构造函数为显式 改为隐式

参见

设置引擎的当前状态
(公开成员函数)