std::mersenne_twister_engine<UIntType,w,n,m,r,a,u,d,s,b,t,c,l,f>:: mersenne_twister_engine
From cppreference.net
<
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
SeedSeq
>
explicit mersenne_twister_engine ( SeedSeq & seq ) ; |
(3) | (C++11以降) |
|
mersenne_twister_engine
(
const
mersenne_twister_engine
&
other
)
;
|
(4) |
(C++11以降)
(暗黙的に宣言) |
擬似乱数生成エンジンを構築します。
1)
デフォルトコンストラクタ。
-
デフォルト構築されたエンジンが型
std::mt19937の場合、その10000回目の連続呼び出しは値 4123659995 を生成する。 -
デフォルト構築されたエンジンが型
std::mt19937_64の場合、その10000回目の連続呼び出しは値 9981545732273789042 を生成する。
3)
シードシーケンス
seq
を用いてエンジンを構築する。
std::
size_t
(
w
/
32
)
+
1
を
k
として、エンジンの初期
状態
は以下のように決定される:
- 長さ n * k の仮想配列オブジェクト a を作成する。
- seq. generate ( a + 0 , a + n * k ) を呼び出す。
-
区間
[- n,- 1]内の各整数 i について、 X i を (∑ k-1
j=0 a k(i+n)+j ·2 32j
) mod 2 w
に設定する。 -
X
-n
の最上位
w − r
ビットがゼロであり、かつ他のすべての
X
i
が
0
である場合、
X
-n
を
2
w-1
に変更する。
4)
コピーコンストラクタ。構築時には、
*
this
==
other
が
true
となります。
目次 |
パラメータ
| value | - | 内部状態の初期化に使用するシード値 |
| seq | - | 内部状態の初期化に使用するシードシーケンス |
計算量
1,2)
O(n)
.
3)
seq.generate
呼び出しの複雑度と同じ。
4)
O(n)
.
例外
例
|
このセクションは不完全です
理由: オーバーロード (2-4) のデモが必要 |
このコードを実行
#include <cassert> #include <random> int main() { std::mt19937 gen32; // overload (1) std::mt19937_64 gen64; // overload (1) gen32.discard(10000 - 1); gen64.discard(10000 - 1); assert(gen32() == 4123659995); assert(gen64() == 9981545732273789042ull); }
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 2181 | C++11 |
overload
(
3
)
would not throw even if the
seq.generate
call throws
|
propagates the exception |
| P0935R0 | C++11 | the default constructor was explicit | made implicit |
関連項目
|
エンジンの現在の状態を設定する
(公開メンバ関数) |