名前付き要件:RandomNumberEngine
提供: cppreference.com
乱数エンジンは有り得る結果の範囲内の値それぞれが (理想的には) 等しい確率を持つような符号なし整数値を返す関数オブジェクトです。
あらゆる乱数エンジンは UniformRandomBitGenerator でもあり、そのため乱数 (形式的にはランダム変量) を取得するために任意の乱数分布に差し込むことができます。
[編集]要件
以下の内容を満たす場合、 UniformRandomBitGenerator を満たす型 E
はさらに RandomNumberEngine を追加で満たします。
E::result_type
によって表される型T
T
型の値s
E
型の非 const な値e
E
型の左辺値v
E
型の値x
,y
(const かもしれません)- SeedSequence を満たす何らかの型の左辺値
q
unsigned long long
型の値z
- 出力ストリーム
os
- 入力ストリーム
is
が与えられたとき、以下の式が有効でなければならず、指定された効果を持たなければなりません。
式 | 戻り値の型 | 要件 |
---|---|---|
E() | E 型のデフォルト構築された他のすべてのエンジンと同じ状態を持つエンジンを作成します。 | |
E(x) | x と同じ状態を持つエンジンを作成します。 | |
E(s) | 整数 s によって決定された初期状態を持つエンジンを作成します。 | |
E(q) | q.generate の単一の呼び出しによって決定された初期状態を持つエンジンを作成します。 | |
e.seed() | void | e == E() を設定します。 |
e.seed(s) | void | e == E(s) を設定します。 |
e.seed(q) | void | e == E(q) を設定します。 |
e() | T | 閉区間 [E::min(), E::max()] 内の値を返します。 償却定数時間の計算量を持ちます。 |
e.discard(z) | void | e() を連続で z 回呼んだかのように e の状態を進めます。 |
x == y | bool | x と y が同じ状態 (x() と y() の将来の呼び出しの繰り返しが同一のシーケンスを生成する) 場合 true 。 そうでなければ false 。 |
x != y | bool | !(x == y) |
os << x | decltype(os)& | x の現在の状態のテキスト表現を os に書き込みます。 出力内の隣接する数値は1個以上の空白で区切られます。 os の fmtflags が ios_base::dec|ios_base::left に設定されていない場合、動作は未定義かもしれません。 |
is >> v | decltype(is)& | 状態が os << x によって以前書きこまれた場合に x == v となるような v の現在の状態のテキスト表現を is から読み込みます。 is の fmtflags が ios_base::dec に設定されていない場合、動作は未定義かもしれません。 |
[編集]標準ライブラリ
以下の標準ライブラリの機能は RandomNumberEngine を満たします。
(C++11) | 線形合同法のアルゴリズムを実装します (クラステンプレート) |
(C++11) | メルセンヌ・ツイスタのアルゴリズムを実装します (クラステンプレート) |
(C++11) | キャリー付き減算 (ラグ付きフィボナッチ法) のアルゴリズムを実装します (クラステンプレート) |
(C++11) | 乱数エンジンの出力をいくらか破棄します (クラステンプレート) |
(C++11) | 指定されたビット数のブロックに乱数の出力をパックします (クラステンプレート) |
(C++11) | 乱数エンジンの出力を異なる順序に並び替えます (クラステンプレート) |
以下の標準ライブラリの機能は UniformRandomBitGenerator を満たしますが RandomNumberEngine を満たしません。
(C++11) | ハードウェアエントロピーソースを使用する非決定的な乱数生成器 (クラス) |