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