Compartir vía


linear_congruential_engine (Clase)

Genera una secuencia aleatoria mediante un algoritmo congruencial lineal.

Sintaxis

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);
   };

Parámetros

UIntType
El tipo de resultado integral sin signo. Para obtener información sobre los tipos posibles, consulte <random>.

A
Multiplicador. Condición previa: vea la sección Comentarios.

C
Incremento. Condición previa: vea la sección Comentarios.

M
Módulo. Condición previa: vea los comentarios.

Miembros

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 es un miembro constante, definido como 1u, utilizado como el valor de parámetro predeterminado para linear_congruential_engine::seed y el constructor de valores simple.

Para obtener más información sobre los miembros del motor, vea <random>.

Comentarios

La plantilla de clase linear_congruential_engine es el motor de generador más sencillo, pero no el más rápido ni de mejor calidad. Una mejora realizada sobre este motor es el motor de resta llevando. Ninguno de estos motores logra unos resultados tan rápidos y de tan alta calidad como el motor Mersenne Twister.

Este motor genera valores de un tipo integral sin signo especificado por el usuario mediante la relación de repetición (período) x(i) = (A * x(i-1) + C) mod M.

Si M es cero, el valor usado en esta operación de módulo es numeric_limits<result_type>::max() + 1. El estado del motor es el último valor devuelto, o bien el valor de inicialización si no se ha llamado a operator().

Si M no es cero, los valores de los argumentos de plantilla A y C deben ser inferiores a M.

Aunque puede construir un generador directamente a partir de este motor, también puede usar una de estas definiciones de tipo predefinidas.

minstd_rand0: motor estándar mínimo 1988 (Lewis, Goodman y Miller, 1969).

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

minstd_rand: Motor estándar mínimo minstd_rand0 actualizado (Park, Miller y Stockmeyer, 1993).

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

Para obtener más información sobre el algoritmo de motor congruencial lineal, vea el artículo de la Wikipedia sobre el generador congruencial lineal.

Requisitos

Encabezado:<random>

Espacio de nombres: std

Consulte también

<random>