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, 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 です:
-
- 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
タグ内のテキスト、C++特有の用語(変数名・演算子)は翻訳対象外のため、原文のまま維持されています)
ジェネレータプロパティ
mersenne_twister_engineの状態の
サイズ
は
n
であり、各状態は
result_type
型の
n
個の値からなるシーケンス
X
で構成されます。
X
j
は
X
の
j mod n
番目(0から開始)の値を表します。
以下のビット演算の表記が与えられた場合:
- bitand , 組み込みの ビット単位AND 。
- xor , 組み込みの ビット単位XOR 。
- lshift , 組み込みの ビット単位左シフト 。
- rshift , 組み込みの ビット単位右シフト 。
mersenne_twister_engineの
遷移アルゴリズム
(
TA(x
i
)
) は以下のように定義されます:
- X i-n の上位 w - r ビットと X i+1-n の下位 r ビットを連結し、符号なし整数値 Y を得る。
- y を a·(Y bitand 1) とし、 X i を X i+m−n xor (Y rshift 1) xor y に設定する。
mersenne_twister_engineの
生成アルゴリズム
(
GA(x
i
)
) は以下のように定義されます:
- z 1 を X i xor ((X i rshift u) bitand d) とする。
-
z
2
を
X
i
xor (((X
i
lshift s) mod 2
w
) bitand b) とする。 -
z
3
を
X
i
xor (((X
i
lshift t) mod 2
w
) bitand c) とする。 - z 4 を z 3 xor (z 3 rshift l) とする。
- z 4 を結果として返す(すなわち GA(x i )=z 4 )。
事前定義された特殊化
以下の特殊化は、よく使用される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
,
|
ネストされた型
| 型 | 定義 |
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)
|
二つの擬似乱数生成エンジンの内部状態を比較する
(関数) |
|
(C++11)
|
擬似乱数生成エンジンに対するストリーム入出力を実行する
(関数テンプレート) |
例
|
このセクションは不完全です
理由: 例がありません |