Namespaces
Variants

std:: mersenne_twister_engine

From ja.cppreference.net
定義済みヘッダー <random>
template <

class UIntType, std:: size_t w, std:: size_t n, std:: size_t m, std:: size_t r,
UIntType a, std:: size_t u, UIntType d, std:: size_t s,
UIntType b, std:: size_t t, UIntType c, std:: size_t l, UIntType f

> class mersenne_twister_engine ;
(C++11以降)

mersenne_twister_engine は、 Mersenne Twister アルゴリズムに基づく乱数エンジンです。これは高品質な、ただし暗号学的に安全ではない、 UIntType 型の符号なし整数乱数を区間 [0, 2 w
)
で生成します。

目次

テンプレートパラメータ

UIntType - ジェネレータによって生成される結果の型。これが unsigned short 、 unsigned int 、 unsigned long または unsigned long long のいずれでもない場合、動作は未定義です。
w - エンジンによって生成される値の範囲を決定する2のべき乗
n - 再帰の次数
m - 中間語。状態を定義する再帰関係で使用されるオフセット
r - 下位ビットマスクのビット数。ツイスト値とも呼ばれる
a - 条件付きXORマスク。すなわち、有理正規形ツイスト行列の係数
u, d, s, b, t, c, l - ビットスクランブル(テンパリング)行列の第1から第7成分
f - 初期化乗数

以下の制限のいずれかに違反した場合、プログラムは不適格となります:

  • m は [ 1 , n ] の範囲内です。
  • 以下の式はすべて true です:
  • 与えられた ( 1u << w ) - 1u を w1 とすると、以下の式はすべて true となります:
  • a <= w1
  • b <= w1
  • c <= w1
  • d <= w1
  • f <= w1
(注:指定された条件により、HTMLタグ・属性、タグ内のテキスト、C++特有の用語(変数名・演算子)は翻訳対象外のため、原文のまま維持されています)

ジェネレータプロパティ

mersenne_twister_engineの状態の サイズ は n であり、各状態は result_type 型の n 個の値からなるシーケンス X で構成されます。 X j は X の j mod n 番目(0から開始)の値を表します。

以下のビット演算の表記が与えられた場合:

mersenne_twister_engineの 遷移アルゴリズム ( TA(x i ) ) は以下のように定義されます:

  1. X i-n の上位 w - r ビットと X i+1-n の下位 r ビットを連結し、符号なし整数値 Y を得る。
  2. y を a·(Y bitand 1) とし、 X i を X i+m−n xor (Y rshift 1) xor y に設定する。

mersenne_twister_engineの 生成アルゴリズム ( GA(x i ) ) は以下のように定義されます:

  1. z 1 を X i xor ((X i rshift u) bitand d) とする。
  2. z 2 を X i xor (((X i lshift s) mod 2 w
    ) bitand b)
    とする。
  3. z 3 を X i xor (((X i lshift t) mod 2 w
    ) bitand c)
    とする。
  4. z 4 を z 3 xor (z 3 rshift l) とする。
  5. z 4 を結果として返す(すなわち GA(x i )=z 4 )。

事前定義された特殊化

以下の特殊化は、よく使用される2つのパラメータセットを持つ乱数生成エンジンを定義します:

定義済みヘッダ <random>
型 定義
mt19937 (C++11)

std :: mersenne_twister_engine < std:: uint_fast32_t ,
32 , 624 , 397 , 31 ,
0x9908b0df , 11 ,
0xffffffff , 7 ,
0x9d2c5680 , 15 ,
0xefc60000 , 18 , 1812433253 >
松本眞と西村拓士による32ビットメルセンヌ・ツイスタ、1998年

mt19937_64 (C++11)

std :: mersenne_twister_engine < std:: uint_fast64_t ,
64 , 312 , 156 , 31 ,
0xb5026f5aa96619e9 , 29 ,
0x5555555555555555 , 17 ,
0x71d67fffeda60000 , 37 ,
0xfff7eee000000000 , 43 ,
6364136223846793005 >
松本眞と西村拓士による64ビットメルセンヌ・ツイスタ、2000年

ネストされた型

型 定義
result_type UIntType

データメンバ

constexpr size_t word_size
[static]
w
(公開静的メンバ定数)
constexpr size_t state_size
[static]
n
(公開静的メンバ定数)
constexpr size_t shift_size
[static]
m
(公開静的メンバ定数)
constexpr size_t mask_bits
[static]
r
(公開静的メンバ定数)
constexpr UIntType xor_mask
[static]
a
(公開静的メンバ定数)
constexpr size_t tempering_u
[static]
u
(公開静的メンバ定数)
constexpr UIntType tempering_d
[static]
d
(公開静的メンバ定数)
constexpr size_t tempering_s
[static]
s
(公開静的メンバ定数)
constexpr UIntType tempering_b
[static]
b
(公開静的メンバ定数)
constexpr size_t tempering_t
[static]
t
(公開静的メンバ定数)
constexpr UIntType tempering_c
[static]
c
(公開静的メンバ定数)
constexpr size_t tempering_l
[static]
l
(公開静的メンバ定数)
constexpr UIntType initialization_multiplier
[static]
f
(公開静的メンバ定数)
constexpr UIntType default_seed
[static]
5489u
(公開静的メンバ定数)

メンバー関数

構築とシード設定
エンジンを構築する
(公開メンバ関数)
エンジンの現在の状態を設定する
(公開メンバ関数)
生成
エンジンの状態を進め、生成された値を返す
(公開メンバ関数)
指定された量だけエンジンの状態を進める
(公開メンバ関数)
特性
[static]
出力範囲で取り得る最小値を取得する
(公開静的メンバ関数)
[static]
出力範囲で取り得る最大値を取得する
(公開静的メンバ関数)

非メンバー関数

(C++11) (C++11) (removed in C++20)
二つの擬似乱数生成エンジンの内部状態を比較する
(関数)
擬似乱数生成エンジンに対するストリーム入出力を実行する
(関数テンプレート)

例