mersenne_twister_engine クラス
メルセンヌ ツイスタ アルゴリズムを基にして、品質の高い整数のランダム シーケンスを生成します。
構文
template <class UIntType,
size_t W, size_t N, size_t M, size_t R,
UIntType A, size_t U, UIntType D, size_t S,
UIntType B, size_t T, UIntType C, size_t L, UIntType F>
class mersenne_twister_engine;
パラメーター
UIntType
結果を表す符号なし整数型。 使用可能な型については、「<random>」を参照してください。
W
ワード サイズ。 状態シーケンスの各ワードのサイズ (ビット数)。 前提条件: 2u < W ≤ numeric_limits<UIntType>::digits
N
状態のサイズ。 状態シーケンス内の要素 (値) の数。
M
シフト サイズ。 ひねりを加えるごとにスキップする要素の数。 前提条件: 0 < M ≤ N
R
マスク ビット。 前提条件: R ≤ W
A
XOR マスク。 前提条件: A ≤ (1u<<W) - 1u
U, S, T, L
調律のシフト パラメーター。 スクランブル (調律) 時のシフト値として使用されます。 前提条件: U,S,T,L ≤ W
D, B, C
調律のビット マスク パラメーター。 スクランブル (調律) 時のビット マスク値として使用されます。 前提条件: D,B,C ≤ (1u<<W) - 1u
F
初期化乗数。 シーケンスの初期化を支援するために使用されます。 前提条件: F ≤ (1u<<W) - 1u
メンバー
mersenne_twister_engine::mersenne_twister_engine
mersenne_twister_engine::discard
mersenne_twister_engine::max
mersenne_twister_engine::min
mersenne_twister_engine::operator()
mersenne_twister_engine::seed
default_seed
は、5489u
として定義されているメンバー定数で、mersenne_twister_engine::seed
および単一値コンストラクターの既定のパラメーター値として使用されます。
エンジンのメンバーの詳細については、「<random>」を参照してください。
解説
このクラス テンプレートでは、閉区間 [ 0
, 2
W - 1
] の値を返す乱数エンジンについて記述します。 このエンジンは、W * (N - 1) + R
ビットの大きな整数値を保持します。 この大きな値から一度に W ビットを抽出し、すべてのビットを使用し尽くすと、ビットをシフトし、混ぜ合わせることにより大きな値に "ひねり" を加えて、抽出元となる新しいビットの集合を作成します。 エンジンの状態は、operator()
が少なくともN回呼び出された場合に使用される最後のN
W
ビット値です。それ以外の場合は、使用されているM
W
ビット値とシードの最後のN - M
値です。
ジェネレーターは、シフト値 N と M、ねじれ値 R、および条件付き XOR マスク A によって定義されるツイスト一般化フィードバック シフト レジスタを使用して、保持している大きな値にひねりを加えます。さらに、生シフト レジスタのビットは、U、D、S、B、T、C、L の値によって定義されるビット スクランブル行列に従って、スクランブル (調律) されます。
テンプレート引数 UIntType
には、最大 2
W - 1
の値を保持するのに十分な大きさが必要です。 その他のテンプレート引数の値は、次の要件を満たしている必要があります。2u < W, 0 < M, M ≤ N, R ≤ W, U ≤ W, S ≤ W, T ≤ W, L ≤ W, W ≤ numeric_limits<UIntType>::digits, A ≤ (1u<<W) - 1u, B ≤ (1u<<W) - 1u, C ≤ (1u<<W) - 1u, D ≤ (1u<<W) - 1u, and F ≤ (1u<<W) - 1u
このエンジンから直接ジェネレーターを構築できますが、次の表にある定義済みの typedef のいずれかを使用することをお勧めします。
mt19937
: 32 ビット メルセンヌ ツイスタ エンジン (松本、西村、1998年)。
typedef mersenne_twister_engine<unsigned int, 32, 624, 397,
31, 0x9908b0df,
11, 0xffffffff,
7, 0x9d2c5680,
15, 0xefc60000,
18, 1812433253> mt19937;
mt19937_64
: 64 ビット メルセンヌ ツイスタ エンジン (松本、西村、2000年)。
typedef mersenne_twister_engine<unsigned long long, 64, 312, 156,
31, 0xb5026f5aa96619e9ULL,
29, 0x5555555555555555ULL,
17, 0x71d67fffeda60000ULL,
37, 0xfff7eee000000000ULL,
43, 6364136223846793005ULL> mt19937_64;
メルセンヌ ツイスタ アルゴリズムの詳細については、Wikipedia の記事「メルセンヌ ツイスタ」をご覧ください。
例
コード例については、<random> をご覧ください。
要件
ヘッダー: <random>
名前空間: std