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

此引擎使用重复关系( period) x(i) = (A * x(i-1) + C) mod M 产生用户指定的无符号整型值。

如果 M 为零,则用于此取模运算的值是 numeric_limits<result_type>::max() + 1。 引擎的状态是返回的最后一个值,或是种子值(如果尚未对 operator() 进行调用)。

如果 M 不为零,则模板参数 A 和 C 的值必须小于 M

虽然可以从此引擎直接构造生成器,但也可以使用其中一个预定义的 typedef。

minstd_rand0:1988 最小标准引擎(Lewis、Goodman 和 Miller,1969)。

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

minstd_rand:更新的最小标准引擎 minstd_rand0(Park、Miller 和 Stockmeyer,1993)。

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

有关线性同余引擎算法的详细信息,请参阅 Wikipedia 文章线性同余生成器

要求

标头:<random>

命名空间: std

另请参阅

<random>