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フィボナッチジェネレータを参照してください。

要件

ヘッダー: <random>

名前空間: std

関連項目

<random>