次の方法で共有


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::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 のベースとして使用されます。

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 法」を参照してください。

必要条件

ヘッダー: <random>

名前空間: std

参照

関連項目

<random>