次の方法で共有


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, 2W - 1] の値を返す乱数エンジンについて記述します。 このエンジンは、W * (N - 1) + R ビットの大きな整数値を保持します。 この大きな値から一度に W ビットを抽出し、すべてのビットを使用し尽くすと、ビットをシフトし、混ぜ合わせることにより大きな値に "ひねり" を加えて、抽出元となる新しいビットの集合を作成します。 エンジンの状態は、operator()が少なくともN回呼び出された場合に使用される最後のN Wビット値です。それ以外の場合は、使用されているM Wビット値とシードの最後のN - M値です。

ジェネレーターは、シフト値 NM、ねじれ値 R、および条件付き XOR マスク A によって定義されるツイスト一般化フィードバック シフト レジスタを使用して、保持している大きな値にひねりを加えます。さらに、生シフト レジスタのビットは、UDSBTCL の値によって定義されるビット スクランブル行列に従って、スクランブル (調律) されます。

テンプレート引数 UIntType には、最大 2W - 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

関連項目

<random>