std::linear_congruential_engine<UIntType,a,c,m>::linear_congruential_engine
来自cppreference.com
< cpp | numeric | random | linear congruential engine
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,引擎的初始状态通过以下方式确定:
- 创建一个长度是 k + 3 的虚设数组对象。
- 调用 seq.generate(a + 0, a + k + 3)。
- 设 S 为 (∑k-1
j=0 a
j+3·232j
) mod m。 - 如果 c % m == 0 和 S == 0 都是 true,那么将引擎状态设为 1。否则将引擎状态设为 S。
此重载只有在
SeedSeq
满足种子序列 (SeedSequence) 的要求时才会参与重载决议。4) 复制构造函数。构造完成时 *this == other 是 true。
参数
value | - | 用于内部状态初始化的种子值 |
seq | - | 用于内部状态初始化的种子序列 |
复杂度
1,2) 常数。
3) 与
seq.generate
调用的复杂度相同。4) 常数。
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
P0935R0 | C++11 | 默认构造函数是显式的 | 改成隐式的 |
参阅
(C++11) |
设置引擎的当前状态 (公开成员函数) |