std::subtract_with_carry_engine
From cppreference.com
| ヘッダー <random> で定義 |
||
| template< class UIntType, |
(C++11以降) | |
は、subtract with carryアルゴリズムを使用する乱数エンジンのひとつです。
目次 |
[編集] テンプレートパラメータ
| UIntType | - | ジェネレータによって生成される結果の型。これがunsigned short、unsigned int、unsigned long、またはunsigned long longのいずれでもない場合、動作は未定義です。 |
| w | - | 状態シーケンスのワードサイズ(ビット単位) |
| s | - | 短いラグ |
| r | - | 長いラグ |
もし w が [1, std::numeric_limits<UIntType>::digits] になく、または s が [1, r) にない場合、プログラムは形式エラーとなります。
[編集] ジェネレータのプロパティ
subtract_with_carry_engine の状態のサイズは O(r) であり、それぞれ2つの部分から構成されます。
- 整数値 X のシーケンスで、r 個の値があり、各値は
[0,2w)の範囲にあります。 - 整数 c(「キャリー」として知られる)で、その値は 0 または 1 です。
Xj を X の j mod r番目の値(0から始まる)とすると、subtract_with_carry_engine の遷移アルゴリズム(TA(xi))は次のように定義されます。
- Y を Xi-s-Xi-r-c とします。
- y を Y mod 2w
とし、X_i を y に設定します。 - もし Y が負であれば、c を 1 に設定し、そうでなければ c を 0 に設定します。
subtract_with_carry_engine の生成アルゴリズムは GA(xi) = y であり、ここで y は遷移アルゴリズムのステップ2で生成された値です。
[編集] 事前定義された特殊化
以下の特殊化は、一般的に使用される2つのパラメータセットを持つ乱数エンジンを定義します。
| ヘッダー
<random> で定義 | |
| 型 | 定義 |
ranlux24_base (C++11) |
std::subtract_with_carry_engine<std::uint_fast32_t, 24, 10, 24> |
ranlux48_base (C++11) |
std::subtract_with_carry_engine<std::uint_fast64_t, 48, 5, 12> |
[編集] ネストされた型
| 型 | 定義 |
result_type
|
UIntType
|
[編集] データメンバー
| constexpr std::size_t word_size [static] |
w (公開静的メンバ定数) |
| constexpr std::size_t short_lag [static] |
s (公開静的メンバ定数) |
| constexpr std::size_t long_lag [static] |
r (公開静的メンバ定数) |
| constexpr std::uint_least32_t default_seed [static] |
19780503u (公開静的メンバ定数) |
[編集] メンバ関数
構築とシード | |
| エンジンを構築します。 (public member function) | |
| エンジンの現在の状態を設定します。 (public member function) | |
生成 | |
| エンジンの状態を進め、生成された値を返す (public member function) | |
| 指定された量だけエンジンの状態を進めます。 (public メンバ関数) | |
特性 | |
| [static] |
出力範囲の最小値を返します。 (public static member function) |
| [static] |
出力範囲の最大値を返します。 (public static member function) |
[編集] 非メンバ関数
| (C++11)(C++11)(C++20で削除) |
2つの擬似乱数エンジンの内部状態を比較します。 (関数) |
| (C++11) |
疑似乱数エンジンのストリーム入出力を実行 (関数テンプレート) |
[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 3809 | C++11 | default_seed はresult_type で表現できない場合がある |
型が変更された std::uint_least32_t |