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>::digits
S
短いラグ。 整数値の数。 前提条件: 0 < S < R
R
長いラグ。 生成される数列の中の繰り返しを決定します。
メンバー
subtract_with_carry_engine::subtract_with_carry_engine
subtract_with_carry_engine::max
subtract_with_carry_engine::min
subtract_with_carry_engine::discard
subtract_with_carry_engine::operator()
subtract_with_carry_engine::seed
default_seed は、19780503u として定義されているメンバー定数で、subtract_with_carry_engine::seed および単一値コンストラクターの既定のパラメーター値として使用されます。
エンジンのメンバーの詳細については、<random> をご覧ください。
注釈
substract_with_carry_engine クラス テンプレートは、linear_congruential_engine を改良したものです。 これらのエンジンはいずれも、mersenne_twister_engine ほど高速ではなく、結果も高品質ではありません。
このエンジンは、漸化式 (period) 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 のベースとして使用されます。
typedef subtract_with_carry_engine<unsigned int, 24, 10, 24> ranlux24_base;
ranlux48_base: ranlux48 のベースとして使用されます。
typedef subtract_with_carry_engine<unsigned long long, 48, 5, 12> ranlux48_base;
キャリー付き減算エンジンのアルゴリズムの詳細については、Wikipedia の記事「Lagged Fibonacci generator」(Lagged Fibonacci 法) を参照してください。
要件
ヘッダー:<random>
名前空間: std