Namespaces
Variants

std::mersenne_twister_engine<UIntType,w,n,m,r,a,u,d,s,b,t,c,l,f>:: mersenne_twister_engine

From cppreference.net
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 を生成する。
2) シード値 value でエンジンを構築する。 2 w
p として、エンジンの初期 状態 は以下のように決定される:
  1. X -n value % p に設定する。
  2. 各整数 i について [ i - n , - 1 ] の範囲で、 X i [f·(X i-1 xor (X i-1 rshift (w-2)))+i mod n] mod p に設定する。ここで xor rshift はそれぞれ組み込みの ビット単位XOR ビット単位右シフト を表す。
3) シードシーケンス seq を用いてエンジンを構築する。 std:: size_t ( w / 32 ) + 1 k として、エンジンの初期 状態 は以下のように決定される:
  1. 長さ n * k の仮想配列オブジェクト a を作成する。
  2. seq. generate ( a + 0 , a + n * k ) を呼び出す。
  3. 区間 [ - n , - 1 ] 内の各整数 i について、 X i (∑ k-1
    j=0
    a k(i+n)+j ·2 32j
    ) mod 2 w
    に設定する。
  4. X -n の最上位 w − r ビットがゼロであり、かつ他のすべての X i 0 である場合、 X -n 2 w-1
    に変更する。
このオーバーロードは、 SeedSeq SeedSequence の要件を満たす場合にのみ、オーバーロード解決に参加します。
4) コピーコンストラクタ。構築時には、 * this == other true となります。

目次

パラメータ

value - 内部状態の初期化に使用するシード値
seq - 内部状態の初期化に使用するシードシーケンス

計算量

1,2) O(n) .
3) seq.generate 呼び出しの複雑度と同じ。
4) O(n) .

例外

3) SeedSeq std::seed_seq でない場合、 seq.generate 呼び出しによって送出される例外を送出する。

#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

関連項目

エンジンの現在の状態を設定する
(公開メンバ関数)