std::linear_congruential_engine<UIntType,a,c,m>:: linear_congruential_engine
From cppreference.net
<
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 的虚构数组对象 a 。
- 调用 seq. generate ( a + 0 , a + k + 3 ) 。
-
令
S
为
(∑
k-1
j=0 a j+3 ·2 32j
) mod m 。 - 若 c % m == 0 和 S == 0 均为 true ,则将引擎状态设为 1 ;否则将引擎状态设为 S 。
4)
复制构造函数。构造完成后,
*
this
==
other
为
true
。
目录 |
参数
| value | - | 用于初始化内部状态的种子值 |
| seq | - | 用于初始化内部状态的种子序列 |
复杂度
1,2)
常量。
3)
与
seq.generate
调用的复杂度相同。
4)
常量。
异常
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 2181 | C++11 |
重载
(
3
)
即使
seq.generate
调用抛出异常也不会抛出
|
传播该异常 |
| P0935R0 | C++11 | 默认构造函数为显式 | 改为隐式 |
参见
|
设置引擎的当前状态
(公开成员函数) |