std:: subtract_with_carry_engine
|
ヘッダーで定義
<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 のいずれか
X
j
が
j mod r
番目(0から開始)の値を表すものとすると、
X
の
遷移アルゴリズム
である
subtract_with_carry_engine
(
TA(x
i
)
)は以下のように定義されます:
- Y を X i-s -X i-r -c と定義する。
-
y
を
Y mod 2
w
とし、 X i を y に設定する。 - Y が負の場合、 c を 1 に設定し、それ以外の場合 c を 0 に設定する。
subtract_with_carry_engine
の
生成アルゴリズム
は
GA(x
i
) = 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
(公開静的メンバ定数) |
メンバー関数
構築とシード設定 |
|
|
エンジンを構築する
(公開メンバ関数) |
|
|
エンジンの現在の状態を設定する
(公開メンバ関数) |
|
生成 |
|
|
エンジンの状態を進め、生成された値を返す
(公開メンバ関数) |
|
|
指定された量だけエンジンの状態を進める
(公開メンバ関数) |
|
特性 |
|
|
[static]
|
出力範囲の最小値を取得する
(公開静的メンバ関数) |
|
[static]
|
出力範囲の最大値を取得する
(公開静的メンバ関数) |
非メンバー関数
|
(C++11)
(C++11)
(removed in C++20)
|
二つの擬似乱数生成エンジンの内部状態を比較する
(関数) |
|
(C++11)
|
擬似乱数生成エンジンに対するストリーム入出力を実行する
(関数テンプレート) |
例
|
このセクションは不完全です
理由: 例がありません |
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 3809 | C++11 |
default_seed
は
result_type
で表現できない可能性がある
|
その型を
std::uint_least32_t に変更 |