subtract_with_carry_engine クラス
キャリー付き減算 (ラグ付きフィボナッチ法) アルゴリズムでランダム シーケンスを生成します。
template<class UIntType, size_t W, size_t S, size_t R> class subtract_with_carry_engine;
パラメーター
UIntType
結果を表す符号なし整数型。 使用可能な型については、「<random>」を参照してください。W
ワード サイズ。 状態シーケンスの各ワードのサイズ (ビット数)。 前提条件: 0 < W ≤ numeric_limits<UIntType>::digitsS
短いラグ。 整数値の数。 前提条件: 0 < S < RR
長いラグ。 生成される数列の中の繰り返しを決定します。
メンバー
subtract_with_carry_engine::subtract_with_carry_engine |
subtract_with_carry_engine::min |
subtract_with_carry_engine::discard |
subtract_with_carry_engine::operator() |
subtract_with_carry_engine::max |
subtract_with_carry_engine::seed |
default_seed は、19780503u として定義されているメンバー定数で、subtract_with_carry_engine::seed および単一値コンストラクターの既定のパラメーター値として使用されます。 |
エンジンのメンバーの詳細については、「<random>」を参照してください。
解説
substract_with_carry_engine テンプレート クラスは、linear_congruential_engine を改良したものです。 これらのエンジンはいずれも、mersenne_twister_engine ほど高速ではなく、結果も高品質ではありません。
このエンジンは、漸化式 (周期) x(i) = (x(i - R) - x(i - S) - cy(i - 1)) mod M を使用して、ユーザー指定の符号なし整数型の値を生成します。ここで、x(i - S) - x(i - R) - cy(i - 1) < 0 の場合 cy(i) は値 1 を、そうでない場合は 0 を持ち、M は値 2W を持ちます。 エンジンの状態は、キャリー インジケーター + R の値になります。 operator() が R 回以上呼び出された場合、これらの値は最後の R の値で構成され、それ以外の場合は、返された N の値とシードの最後の R - N の値で構成されます。
テンプレート引数 UIntType には、最大 M - 1 の値を保持するのに十分な大きさが必要です。
このエンジンから直接ジェネレーターを構築できますが、次の表にある定義済みの typedef のいずれかを使用することもできます。
名前 |
説明 |
---|---|
ranlux24_base |
ranlux24 のベースとして使用されます。
|
ranlux48_base |
ranlux48 のベースとして使用されます。
|
キャリー付き減算エンジンのアルゴリズムの詳細については、Wikipedia の記事「Lagged Fibonacci 法」を参照してください。
必要条件
ヘッダー: <random>
名前空間: std