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

来自cppreference.com
 
 
 
 
 
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 == 0value % m == 0 都是 true,那么状态是 1
  • 否则状态是 value % m
3) 以种子序列 seq 构造引擎。给定 std::size_t(std::log2(m) / 32) + 1k,引擎的初始状态通过以下方式确定:
  1. 创建一个长度是 k + 3 的虚设数组对象。
  2. 调用 seq.generate(a + 0, a + k + 3)
  3. S(∑k-1
    j=0
    a
    j+3
    ·232j
    ) mod m
  4. 如果 c % m == 0S == 0 都是 true,那么将引擎状态设为 1。否则将引擎状态设为 S
此重载只有在 SeedSeq 满足种子序列 (SeedSequence) 的要求时才会参与重载决议。
4) 复制构造函数。构造完成时 *this == othertrue

参数

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

复杂度

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

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
P0935R0 C++11 默认构造函数是显式的 改成隐式的

参阅

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