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
は値 2
W を持ちます。エンジンの状態は、キャリー インジケーター + 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フィボナッチジェネレータを参照してください。
要件
ヘッダー: <random>
名前空間: std