Acest antet introduce facilități de generare de numere aleatorii. Această bibliotecă permite producerea de numere aleatorii folosind combinații de generatoare și distribuții.
- Distribuții : Obiecte care transformă secvențe de numere generate de un generator în secvențe de numere care urmează o distribuție specifică de variabile aleatoare, cum ar fi normală uniformă sau binomială.
Generatoare
I. Motoare cu numere pseudoaleatoare: Ei folosesc un algoritm pentru a genera numere aleatorii bazate pe o sămânță inițială. Acestea sunt:

1. motor_liniar_congruential : Este cel mai simplu motor din biblioteca STL care generează numere întregi fără semn aleatoriu. Urmează:
forma completă cdr
x = (a.x +c) mod m Where x= current state value a = multiplier parameter ; if m is not zero this parameter should be lower than m. c = increment parameter ; if m is not zero this parameter should be lower than m. m = modulus parameter
// C++ program to illustrate // the use of operator() max and min // in linear_congruential_engine #include #include #include using namespace std; // driver program int main () { // finds the time between the system clock //(present time) and clock's epoch unsigned seed = chrono::system_clock::now().time_since_epoch().count(); // minstd_rand0 is a standard // linear_congruential_engine minstd_rand0 generator (seed); // generates the random number cout << generator() << ' is a random number between '; //use of min and max functions cout << generator.min() << ' and ' << generator.max(); return 0; }
Ieșire:
211182246 is a random number between 1 and 2147483646
2. mersenne_twister_engine: Este un motor de numere aleatorii bazat pe algoritmul Mersenne Twister. Produce numere aleatoare întregi fără semn de înaltă calitate în intervalul [0 (2^w)-1].
unde „w” este dimensiunea cuvântului: numărul de biți ai fiecărui cuvânt din secvența stărilor.
// C++ program to illustrate the use of // operator() min and max // in mersenne_twister_engine #include #include #include using namespace std; // Driver program int main () { // finds the time between the system clock // (present time) and clock's epoch unsigned seed = chrono::system_clock::now().time_since_epoch().count(); // mt19937 is a standard mersenne_twister_engine mt19937 generator (seed); // use of operator() cout << generator() << ' is a random number between '; // use of max and min cout << generator.min() << ' and ' << generator.max(); return 0; }
Ieșire:
3348201622 is a random number between 0 and 4294967295
3. scădere_cu_carry_engine: Este un motor generator de numere pseudo-aleatoare care produce numere întregi fără semn.
Algoritmul utilizat este un lagged generator de Fibonacci cu o secvență de stări de r elemente întregi plus o valoare de transport.
// C++ program to illustrate the use of // operator() min and max // in subtract_with_carry_engine #include #include #include using namespace std; // Driver program int main () { // finds the time between the system clock // (present time) and clock's epoch unsigned seed = chrono::system_clock::now().time_since_epoch().count(); subtract_with_carry_engine<unsigned 24 10 24> generator (seed); // use of operator() cout << generator() << ' is a random number between '; // use of min and max cout << generator.min() << ' and ' << generator.max(); return 0; }
Ieșire:
8606455 is a random number between 0 and 16777215
II. Generator de numere aleatorii : Este un generator de numere aleatoare care produce numere aleatoare nedeterministe.
// C++ program to illustrate the use of // operator() min and max // in random_device #include #include using namespace std; //Driver program int main () { random_device example; cout << 'default random_device characteristics:' << endl; // use of min cout << 'minimum: ' << example.min() << endl; // use of max cout << 'maximum: ' << example.max() << endl; // use of entropy cout << 'entropy: ' << example.entropy() << endl; // use of operator() cout << 'a random number: ' << example() << endl; return 0; }
Ieșire:
default random_device characteristics: minimum: 0 maximum: 4294967295 entropy: 0 a random number: 3705944883
III. Motoare cu numere pseudoaleatoare (instanțări) : Acestea sunt instanțiile particulare ale motoarelor și adaptoarelor generatoarelor:

1. default_random_engine : Aceasta este o clasă de motor de numere aleatoare care generează numere pseudoaleatoare.
superscript în ilustrator
Funcția schimbă starea internă cu una care modifică valoarea stării conform algoritmului dat:
x= (a.x + c)mod m Where x= current state value a and c = respective class template parameters m = class template parameterC++
// C++ program to illustrate the use of // operator() min and max // in default_random_engine #include #include #include using namespace std; // Driver program int main () { // finds the time between the system clock // (present time) and clock's epoch unsigned seed = chrono::system_clock::now().time_since_epoch().count(); // minstd_rand0 is a standard linear_congruential_engine minstd_rand0 generator (seed); // generates the random number cout << generator() << ' is a random number between '; // Use of min and max cout << generator.min() << ' and ' << generator.max(); return 0; }
Ieșire:
201066682 is a random number between 1 and 2147483646
2. minstd_rand: Acesta generează numere pseudoaleatoare; este asemănător cu generator liniar congruențial
x = (a.x + c) mod m where x= current state value a c and m=class template parameter
// C++ program to illustrate // the use of operator() max and min // in minstd_rand #include #include #include using namespace std; //Driver program int main () { // finds the time between the system clock //(present time) and clock's epoch unsigned seed = chrono::system_clock::now().time_since_epoch().count(); // minstd_rand0 is a standard //linear_congruential_engine minstd_rand0 generator (seed); // use of operator() cout << generator() << ' is a random number between '; //use of max and min cout << generator.min() << ' and ' << generator.max(); return 0; }
Ieșire:
489592737 is a random number between 1 and 2147483646
3.MT19937: Este un generator Mersenne Twister 19937. Este un generator pseudo-aleatoriu de numere pe 32 de biți cu o dimensiune a stării de 19937 de biți.
C++
// C++ program to illustrate the // use of operator()min and max // in mt19937 #include #include #include using namespace std; // Driver program int main () { // finds the time between the system clock //(present time) and clock's epoch unsigned seed = chrono::system_clock::now().time_since_epoch().count(); // mt19937 is a standard //mersenne_twister_engine mt19937 generator (seed); //use of operator() cout << generator() << ' is a random number between '; //use of max and min cout << generator.min() << ' and ' << generator.max(); return 0; }
Ieșire:
1445431990 is a random number between 0 and 4294967295
4. ranlux24_base: Este un generator de bază Ranlux 24. Este un generator pseudo-aleatoriu de scădere cu transportare de numere pe 24 de biți, utilizat în general ca motor de bază pentru generatorul ranlux24.
ce face un calculator rapid
Funcția schimbă starea internă apelând algoritmul său de tranziție care aplică o operație de scădere cu transport pe element.
// C++ program to illustrate // the use of operator()min and max // in ranlux24_base #include #include #include using namespace std; //Driver program int main () { // finds the time between the system clock //(present time) and clock's epoch unsigned seed = chrono::system_clock::now().time_since_epoch().count(); subtract_with_carry_engine<unsigned241024> generator (seed); //use of operator() cout << generator() << ' is a random number between '; //use of max and min cout << generator.min() << ' and ' << generator.max(); return 0; }
Ieșire:
7275352 is a random number between 0 and 16777215
Format similar este aplicabil pentru celelalte exemple.
IV. Adaptoare de motor

1. discard_block_engine: Este un șablon de clasă de adaptor de motor care adaptează a Motor generator de numere pseudo-aleatoare tastați folosind doar elemente „r” din fiecare bloc de elemente „p” din secvența pe care o produce, aruncând restul.
Adaptorul păstrează un număr intern al câte elemente au fost produse în blocul curent.
Generatoarele standard ranlux24 şi ranlux48 adapta a scădere_cu_carry_engine folosind acest adaptor.
// C++ program to illustrate // the use of operator()min and max // in the discard_block_engine #include #include #include using namespace std; //Driver program int main () { // finds the time between the system clock //(present time) and clock's epoch unsigned seed = chrono::system_clock::now().time_since_epoch().count(); // ranlux24 is a standard instantiation //of discard_block_engine: ranlux24 generator (seed); //use of operator() cout << generator() << ' is a random number between '; //use of max and min cout << generator.min() << ' and ' << generator.max(); return 0; }
Ieșire:
8132325 is a random number between 0 and 16777215
2. independent_bits_engine: Este un șablon de clasă de adaptor de motor care adaptează a Motor generator de numere pseudo-aleatoare tip pentru a produce numere aleatorii cu un anumit număr de biți (w).
Algoritmul de tranziție al motorului invocă membrul operator() al motoarelor de bază de câte ori este necesar pentru a obține suficienți biți semnificativi pentru a construi o valoare aleatorie.
// C++ program to illustrate // the use of operator()min and max // in independent_bits_engine #include #include // It imports the symbol names in // std namespace and possibly in Global namespace. #include #include using namespace std; //Driver program int main () { // finds the time between the system clock //(present time) and clock's epoch unsigned seed = chrono::system_clock::now().time_since_epoch().count(); //use of independent_bits_engine independent_bits_engine<mt1993764uint_fast64_t> generator (seed); //use of operator() cout << generator() << ' is a random number between '; //use of max and min cout << generator.min() << ' and ' << generator.max(); return 0; }
Ieșire:
13551674127875514537 is a random number between 0 and 184467
3. shuffle_order_engine: Este un șablon de clasă de adaptor de motor care adaptează a Motor generator de numere pseudo-aleatoare tastați astfel încât numerele să fie livrate într-o secvență diferită.
Obiectul păstrează un buffer de k numere generate intern și, atunci când este solicitat, returnează un număr selectat aleatoriu în buffer, înlocuindu-l cu o valoare obținută din motorul său de bază.
Algoritmul de tranziție al motorului alege o valoare din tabelul intern (care este returnată de funcție) și o înlocuiește cu o nouă valoare obținută din motorul său de bază.
// C++ program to illustrate // the use of operator()min and max // in shuffle_order_engine #include #include #include using namespace std; int main () { // finds the time between the system clock //(present time) and clock's epoch unsigned seed = chrono::system_clock::now().time_since_epoch().count(); // ranlux24 is a standard instantiation // of discard_block_engine: ranlux24 generator (seed); //use of operator() cout << generator() << ' is a random number between '; //use of max and min cout << generator.min() << ' and ' << generator.max(); return 0; }
Ieșire:
data curentă în java
9213395 is a random number between 0 and 16777215Creați un test