std::mersenne_twister_engine<UIntType,w,n,m,r,a,u,d,s,b,t,c,l,f>::mersenne_twister_engine
< cpp | numeric | random | mersenne twister engine
mersenne_twister_engine() : mersenne_twister_engine(default_seed) {} |
(1) | (C++11 起) |
explicit mersenne_twister_engine( result_type value ); |
(2) | (C++11 起) |
template< class Sseq > explicit mersenne_twister_engine( Sseq& s ); |
(3) | (C++11 起) |
mersenne_twister_engine( const mersenne_twister_engine& ); |
(4) | (C++11 起) (隐式声明) |
构造伪随机数引擎。
1) 默认构造函数。以
default_seed
播种引擎。2) 构造引擎并初始化状态(
i )如下:用 value mod 2w
初始化 X
0 ,并递推初始化其余内容,对于 i=1-n,...,-1 ,初始化每个 X
i 为 [f·(X
i-1xor(X
i-1rshift(w-2)))+i mod n] mod 2w
。
result_type
类型的 n
个值 Xi )如下:用 value mod 2w
初始化 X
0 ,并递推初始化其余内容,对于 i=1-n,...,-1 ,初始化每个 X
i 为 [f·(X
i-1xor(X
i-1rshift(w-2)))+i mod n] mod 2w
。
3) 构造引擎并通过调用 s.generate(a, a+n*k) 初始化状态,其中 a 是长为 n*k 的数组,而 k 为 ceil(w/32) ,然后,对于每个 i=-n,...,-1 ,递推地设置引擎状态的元素 X
i 为 (Σk-1
j=0a
k(i+n)+j}·232j
) mod 2w
,最后若 X
0 的最高 w-r 位为零,且若所有其他 X
i 均为零,则以 2w-1
替换 X
0 。
i 为 (Σk-1
j=0a
k(i+n)+j}·232j
) mod 2w
,最后若 X
0 的最高 w-r 位为零,且若所有其他 X
i 均为零,则以 2w-1
替换 X
0 。
注意:初始化要求基于梅森缠绕器的 2002 版本, mt19937ar.c
仅若 Sseq
符合重载种子序列 (SeedSequence) , (3) 才参与重载决议。尤其是若 Sseq
可转换为 result_type
,则从候选函数集中排除该重载。
参数
value | - | 用于内部状态初始化的种子值 |
s | - | 用于内部状态初始化的种子序列 |
复杂度
与 n
(状态大小)成线性
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
DR | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
P0935R0 | C++11 | 默认构造函数曾为 explicit | 使之为隐式 |
参阅
设置引擎的当前状态 (公开成员函数) |