次の方法で共有


linear_congruential_engine クラス

線形合同法アルゴリズムでランダム シーケンスを生成します。

構文

class linear_congruential_engine{
   public:  // types
   typedef UIntType result_type;
   // engine characteristics
   static constexpr result_type multiplier = a;
   static constexpr result_type increment = c;
   static constexpr result_type modulus = m;
   static constexpr result_type min() { return c == 0u  1u: 0u; }
   static constexpr result_type max() { return m - 1u; }
   static constexpr result_type default_seed = 1u;
   // constructors and seeding functions
   explicit linear_congruential_engine(result_type s = default_seed);
   template <class Sseq>
   explicit linear_congruential_engine(Sseq& q);
   void seed(result_type s = default_seed);
   template <class Sseq>
   void seed(Sseq& q);
   // generating functions
   result_type operator()();
   void discard(unsigned long long z);
   };

パラメーター

UIntType
結果を表す符号なし整数型。 使用可能な型については、「<random>」を参照してください。

A
Multiplier前提条件: 「解説」を参照してください。

C
インクリメント前提条件: 「解説」を参照してください。

M
剰余前提条件: 「解説」を参照してください。

メンバー

linear_congruential_engine::linear_congruential_engine linear_congruential_engine::discard
linear_congruential_engine::max
linear_congruential_engine::min
linear_congruential_engine::operator()
linear_congruential_engine::seed

default_seed は、1u として定義されているメンバー定数で、linear_congruential_engine::seed および単一値コンストラクターの既定のパラメーター値として使用されます。

エンジンのメンバーの詳細については、「<random>」を参照してください。

解説

linear_congruential_engine クラス テンプレートは、最も単純なジェネレーター エンジンですが、速度や品質は最高というわけではありません。 このエンジンを改良したものが substract_with_carry_engine です。 これらのエンジンはいずれも、mersenne_twister_engine ほど高速ではなく、結果も高品質ではありません。

このエンジンは、漸化式 ( 周期) x(i) = (A * x(i-1) + C) mod M を使用して、ユーザー指定の符号なし整数型の値を生成します。

M が 0 の場合、この剰余演算に使用される値は numeric_limits<result_type>::max() + 1 です。 エンジンの状態は、最後に返された値か、または operator() に対して呼び出しが行われなかった場合はシード値になります。

M が 0 以外の場合、テンプレート引数 AC の値は M 未満である必要があります。

このエンジンから直接ジェネレーターを構築できますが、定義済みの typedef のいずれかを使用することもできます。

minstd_rand0: 1988 年の最小標準エンジン (ルイス、グッドマン、ミラー、1969 年)。

typedef linear_congruential_engine<unsigned int, 16807, 0, 2147483647> minstd_rand0;

minstd_rand: minstd_rand0 の改良版最小標準エンジン (パーク、ミラー、ストックマイヤー、1993 年)。

typedef linear_congruential_engine<unsigned int, 48271, 0, 2147483647> minstd_rand;

線形合同法エンジン アルゴリズムの詳細については、Wikipedia の記事「Linear congruential generator (線形合同法)」を参照してください。

要件

ヘッダー: <random>

名前空間: std

関連項目

<random>