Condividi tramite


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

Vedi anche

<random>