std::mersenne_twister_engine
| ヘッダー <random> で定義 |
||
| template< class UIntType, std::size_t w, std::size_t n, std::size_t m, std::size_t r, |
(C++11以降) | |
mersenne_twister_engineは、Mersenne Twisterアルゴリズムに基づいた乱数生成エンジンです。UIntType型の高品質ですが、暗号論的に安全ではない、符号なし整数乱数を区間[0, 2w
)で生成します。
目次 |
[section=1の編集] テンプレートパラメータ
| 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 です。
- w >= 3
- w >= r
- w >= u
- w >= s
- w >= t
- w >= l
- w <= std::numeric_limits<UIntType>::digits
- (1u << w) - 1u を w1 とすると、以下の式はすべて true です。
- a <= w1
- b <= w1
- c <= w1
- d <= w1
- f <= w1
[section=2の編集] 生成器のプロパティ
mersenne_twister_engine の状態のサイズは n であり、それぞれが result_type 型の n 個の値のシーケンス X から構成されます。 Xj は、X の j mod n番目の値(0から始まる)を表します。
以下のビット演算表記を用いる
mersenne_twister_engine の遷移アルゴリズム(TA(xi))は以下のように定義されます。
- Xi-n の上位 w - r ビットと、Xi+1-n の下位 r ビットを連結して、符号なし整数値 Y を得ます。
- y を a·(Y bitand 1) とし、Xi を Xi+m−n xor (Y rshift 1) xor y と設定します。
mersenne_twister_engine の生成アルゴリズム(GA(xi))は以下のように定義されます。
- z1 を Xi xor ((Xi rshift u) bitand d) とします。
- z2 を Xi xor (((Xi lshift s) mod 2w
) bitand b) とします。 - z3 を Xi xor (((Xi lshift t) mod 2w
) bitand c) とします。 - z4 を z3 xor (z3 rshift l) とします。
- z4 を結果として返します(すなわち、GA(xi)=z4)。
[section=3の編集] 事前定義された特殊化
以下の特殊化は、一般的に使用される2つのパラメータセットを持つ乱数エンジンを定義します。
| ヘッダー
<random> で定義 | |
| 型 | 定義 |
mt19937 (C++11) |
std::mersenne_twister_engine<std::uint_fast32_t, |
mt19937_64 (C++11) |
std::mersenne_twister_engine<std::uint_fast64_t, |
[section=4の編集] ネストされた型
| 型 | 定義 |
result_type
|
UIntType
|
[section=5の編集] データメンバ
| 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 (公開静的メンバ定数) |
[section=6の編集] メンバ関数
構築とシード | |
| エンジンを構築します。 (public member function) | |
| エンジンの現在の状態を設定します。 (public member function) | |
生成 | |
| エンジンの状態を進め、生成された値を返す (public member function) | |
| 指定された量だけエンジンの状態を進めます。 (public メンバ関数) | |
特性 | |
| [static] |
出力範囲の最小値を返します。 (public static member function) |
| [static] |
出力範囲の最大値を返します。 (public static member function) |
[section=7の編集] 非メンバ関数
| (C++11)(C++11)(C++20で削除) |
2つの擬似乱数エンジンの内部状態を比較します。 (関数) |
| (C++11) |
疑似乱数エンジンのストリーム入出力を実行 (関数テンプレート) |
[section=8の編集] 例
| このセクションは未完成です 理由: 例がありません |