C++ named requirements: RandomNumberEngine (since C++11)
乱数エンジンは、符号なし整数値を返す関数オブジェクトであり、可能な結果の範囲内の各値が(理想的には)等しい確率で得られるように設計されています。
任意の乱数エンジンはまた UniformRandomBitGenerator でもあり、したがって任意の 乱数分布 に組み込むことで乱数(形式的には確率変数)を得ることができます。
要件
型が RandomNumberEngine を満たすのは、それが UniformRandomBitGenerator を満たし、かつ以下の型と値が与えられた場合に、下記の表における意味論的および計算量の要件が満たされるときです:
| 型 | 定義 |
E
|
RandomNumberEngine 型 |
T
|
E::result_type
|
| 値 | 定義 |
| e |
型
E
の値
|
| v |
型
E
の左辺値
|
| x , y |
型
E
の値(const修飾されている可能性あり)
|
| s |
型
T
の値
|
| q | SeedSequence 左辺値 |
| z | unsigned long long 型の値 |
| os | std::basic_ostream の特殊化である型の左辺値 |
| is | std::basic_istream の特殊化である型の左辺値 |
| n |
E
の状態の
サイズ
|
| TA |
E
の
遷移アルゴリズム
|
| GA |
E
の
生成アルゴリズム
|
| 式 | 戻り値の型 | セマンティクス | 計算量 |
|---|---|---|---|
| E ( ) | N/A |
型
E
の他のすべてのデフォルト構築されたエンジンと同じ初期状態でエンジンを作成します。
|
O(n) |
| E ( x ) | xと等しいと比較するエンジンを作成します。 | O(n) | |
| E ( s ) | 初期状態が s によって決定されるエンジンを作成します。 | O(n) | |
| E ( q ) |
q.generate
の単一呼び出しによって初期状態が決定されるエンジンを作成します。
|
q.generate
の複雑さと同じ(長さ
n
のシーケンスに対して呼び出された場合)
|
|
| 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
の状態を
e
i
から
e
i+1
へ進め(すなわち
TA
(
e
i
)
)、
GA
(
e
i
)
を返す。
|
償却定数時間 |
| e. discard ( z ) | void |
e
の状態を
e
i
から
e
i+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)
|
ハードウェアエントロピーソースを使用する非決定的乱数生成器
(クラス) |