C++ 名前付き要件: RandomNumberEngine (C++11 以降)
From cppreference.com
乱数エンジンは、結果の可能な範囲内の各値が(理想的には)等しい確率を持つような、符号なし整数値を返す関数オブジェクトです。
任意の乱数エンジンは UniformRandomBitGenerator でもあり、したがって、乱数(正式には確率変数)を得るために任意の 乱数分布に組み込むことができます。
[編集] 要件
型が RandomNumberEngine を満たすのは、UniformRandomBitGenerator を満たし、以下の型と値が与えられた場合に、以下の表のセマンティクスおよび複雑性要件が満たされる場合です。
| 型 | 定義 |
E
|
RandomNumberEngine 型 |
T
|
E::result_type
|
| 値 | 定義 |
| e | 型 E の値 |
| v | 型 E の左辺値 |
| x, y | 型 (おそらく const 修飾された) E の値 |
| s | 型 T の値 |
| q | SeedSequence の左辺値 |
| z | 型 unsigned long long の値 |
| os | std::basic_ostream の特殊化の型を持つ左辺値 |
| is | std::basic_istream の特殊化の型を持つ左辺値 |
| n | E の状態の サイズ |
| TA | E の 遷移アルゴリズム |
| GA | E の 生成アルゴリズム |
| Expression | 戻り値の型 | セマンティクス | 計算量 |
|---|---|---|---|
| E() | N/A | すべての他のデフォルト構築された E 型のエンジンと同じ初期状態を持つエンジンを作成します。 |
O(n) |
| E(x) | x と等価なエンジンを作成します。 | O(n) | |
| E(s) | s によって初期状態が決まるエンジンを作成します。 | O(n) | |
| E(q) | q.generate の単一呼び出しによって初期状態が決まるエンジンを作成します。 |
n の長さのシーケンスに対して呼び出された q.generate の複雑性と同じ | |
| e.seed() | void | 事後条件: e == E()。 | E() と同じ |
| e.seed(s) | void | 事後条件: e == E(s)。 | E(s) と同じ |
| e.seed(q) | void | 事後条件: e == E(q)。 | E(q) と同じ |
| e() | T
|
e の状態を ei から ei+1 (つまり TA(ei)) に進め、GA(ei) を返します。 |
償却定数 |
| e.discard(z) | void | e の状態を ei から ei+z へ、e() の z 回の連続した呼び出しに相当する任意の手段で進めます。 |
e() の z 回の連続した呼び出しの複雑性以下 |
| x == y | bool | すべての正の整数 i について、x() および y() の i 番目の連続した呼び出しが同じ値を返す場合、true を返します。それ以外の場合は false を返します。 | O(n) |
| x != y | bool | !(x == y) | O(n) |
| os << x | decltype(os)& | fmtflags が std::ios_base::dec | std::ios_base::left に設定され、埋め文字がスペース文字に設定されている場合、os に x の現在の状態のテキスト表現を書き込みます。 事後条件: os の fmtflags と埋め文字は、操作前と同じです。 |
O(n) |
| is >> v | decltype(is)& | fmtflags が std::ios_base::dec に設定されている場合、is から v の現在の状態のテキスト表現を読み込みます。不正な入力が検出された場合、v の状態が操作によって変更されないことを保証し、is.setstate(std::ios_base::failbit) を呼び出します(これにより std::ios_base::failure がスローされる可能性があります)。 前提条件: is は、以下のすべての条件を満たす出力ストリーム pr を使用して以前に書き込まれたテキスト表現を提供します。
事後条件: is の fmtflags は、操作前と同じです。 |
O(n) |
[編集] 標準ライブラリ
以下の標準ライブラリ機能は RandomNumberEngine を満たします。
| (C++11) |
線形合同法アルゴリズムを実装 (クラステンプレート) |
| (C++11) |
メルセンヌ・ツイスターアルゴリズムを実装 (クラステンプレート) |
| (C++11) |
キャリー付き減算 (遅延フィボナッチ) アルゴリズムを実装 (クラステンプレート) |
| (C++26) |
カウンタベースの並列化可能な生成器 (クラステンプレート) |
| (C++11) |
乱数エンジンの一部の出力を破棄する (クラステンプレート) |
| (C++11) |
乱数エンジンの出力を指定されたビット数のブロックにパックする (クラステンプレート) |
| (C++11) |
乱数エンジンの出力を異なる順序で提供する (クラステンプレート) |
以下の標準ライブラリ機能は UniformRandomBitGenerator を満たしますが、RandomNumberEngine は満たしません。
| (C++11) |
ハードウェアエントロピー源を使用する非決定論的乱数生成器 (クラス) |