Classe linear_congruential_engine
Genera una sequenza casuale mediante l'algoritmo congruenziale lineare.
Sintassi
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);
};
Parametri
UIntType
Tipo di risultato Unsigned Integer. Per i tipi possibili, vedere casuale>.<
A
Moltiplicatore. Precondizione: vedere la sezione Note.
C
Incremento. Precondizione: vedere la sezione Note.
M
Modulo. Precondizione: vedere la sezione Note.
Membri
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
è una costante membro definita come 1u
, usata come valore di parametro predefinito per linear_congruential_engine::seed
e per il costruttore a valore singolo.
Per altre informazioni sui membri del motore, vedere casuale>.<
Osservazioni:
Il linear_congruential_engine
modello di classe è il motore generatore più semplice, ma non la massima qualità o più veloce. Un miglioramento rispetto a questo motore è rappresentato da substract_with_carry_engine. Nessuno di questi motori può tuttavia eguagliare la rapidità e la qualità dei risultati offerte da mersenne_twister_engine.
Il motore produce valori di un tipo integrale senza segno specificato dall'utente usando la relazione di ricorrenza (period) x(i) = (A * x(i-1) + C) mod M
.
Se M è zero, il valore usato per questa operazione modulo è numeric_limits<result_type>::max() + 1
. L'ultimo valore restituito è lo stato del motore oppure il valore di seeding se non sono state effettuate chiamate a operator()
.
Se M non è zero, i valori degli argomenti del modello A e C devono essere minori di M.
Sebbene sia possibile costruire un generatore direttamente da questo motore, è anche possibile usare uno dei typedef predefiniti seguenti.
minstd_rand0
: motore del 1988 a standard minimo (Lewis, Goodman e Miller, 1969).
typedef linear_congruential_engine<unsigned int, 16807, 0, 2147483647> minstd_rand0;
minstd_rand
: motore standard minimo minstd_rand0
aggiornato (Park, Miller e Stockmeyer, 1993).
typedef linear_congruential_engine<unsigned int, 48271, 0, 2147483647> minstd_rand;
Per altre informazioni sull'algoritmo del motore congruenziale lineare, vedere l'articolo di Wikipedia Generatore lineare congruenziale.
Requisiti
Intestazione:<casuale>
Spazio dei nomi: std