W tym nagłówku przedstawiono możliwości generowania liczb losowych. Biblioteka ta umożliwia tworzenie liczb losowych przy użyciu kombinacji generatorów i rozkładów.
- Dystrybucje : Obiekty przekształcające ciągi liczb wygenerowane przez generator na ciągi liczb zgodne z określonym rozkładem zmiennej losowej, takim jak jednolity normalny lub dwumianowy.
Generatory
I. Silniki liczb pseudolosowych: Używają algorytmu do generowania liczb losowych na podstawie początkowego materiału siewnego. Są to:

1. silnik_spójny_liniowy : Jest to najprostszy silnik w bibliotece STL, który generuje losowe liczby całkowite bez znaku. Oto co następuje:
Pełna forma iskconu
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; }
Wyjście:
211182246 is a random number between 1 and 2147483646
2. mersenne_twister_engine: Jest to silnik liczb losowych oparty na algorytmie Mersenne Twister. Tworzy wysokiej jakości liczby losowe w postaci liczb całkowitych bez znaku w przedziale [0 (2^w)-1].
gdzie „w” to rozmiar słowa: liczba bitów każdego słowa w sekwencji stanów.
// 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; }
Wyjście:
3348201622 is a random number between 0 and 4294967295
3. odejmij_z_nośnym_silnikiem: Jest to silnik generatora liczb pseudolosowych, który generuje liczby całkowite bez znaku.
Zastosowany algorytm jest opóźniony generator Fibonacciego z sekwencją stanu składającą się z r elementów całkowitych plus jedna wartość przeniesienia.
// 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; }
Wyjście:
8606455 is a random number between 0 and 16777215
II. Generator liczb losowych : Jest to generator liczb losowych, który generuje niedeterministyczne liczby losowe.
// 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; }
Wyjście:
default random_device characteristics: minimum: 0 maximum: 4294967295 entropy: 0 a random number: 3705944883
III. Silniki liczb pseudolosowych (instancje) : Oto konkretne instancje silników generatorów i adapterów:
Java dodaj do tablicy

1. domyślny_losowy_silnik : Jest to klasa silnika liczb losowych, która generuje liczby pseudolosowe.
Funkcja zmienia stan wewnętrzny o jeden, co modyfikuje wartość stanu zgodnie z zadanym algorytmem:
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; }
Wyjście:
201066682 is a random number between 1 and 2147483646
2. minstd_rand: Generuje liczby pseudolosowe; jest podobne do liniowy generator kongruencjalny
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; }
Wyjście:
pomiń listę
489592737 is a random number between 1 and 2147483646
3.MT19937: Jest to generator Mersenne Twister 19937. Jest to generator pseudolosowy liczb 32-bitowych o rozmiarze stanu wynoszącym 19937 bitów.
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; }
Wyjście:
1445431990 is a random number between 0 and 4294967295
4. ranlux24_base: Jest to generator bazowy Ranlux 24. Jest to pseudolosowy generator liczb 24-bitowych z funkcją odejmowania i przenoszenia, powszechnie używany jako podstawowy silnik generatora ranlux24.
Funkcja zmienia stan wewnętrzny wywołując algorytm przejścia, który stosuje na elemencie operację odejmowania z przeniesieniem.
// 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; }
Wyjście:
7275352 is a random number between 0 and 16777215
Podobny format ma zastosowanie w przypadku pozostałych przykładów.
IV. Adaptery silnika

1. cancel_block_engine: Jest to szablon klasy adaptera silnika, który dostosowuje plik Generator liczb pseudolosowych Silnik wpisz, używając tylko elementów „r” z każdego bloku elementów „p” z utworzonej sekwencji, odrzucając resztę.
Adapter prowadzi wewnętrzne zliczanie liczby elementów wyprodukowanych w bieżącym bloku.
Standardowe generatory ranlux24 I ranlux48 dostosować się subtract_with_carry_engine za pomocą tego adaptera.
// 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; }
Wyjście:
8132325 is a random number between 0 and 16777215
2. niezależny_bits_engine: Jest to szablon klasy adaptera silnika, który dostosowuje plik Generator liczb pseudolosowych Silnik type, aby wygenerować liczby losowe z określoną liczbą bitów (w).
Algorytm przejścia silnika wywołuje element operator() silników podstawowych tyle razy, ile jest to konieczne, aby uzyskać wystarczającą liczbę znaczących bitów do skonstruowania wartości losowej.
// 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; }
Wyjście:
lista stanów
13551674127875514537 is a random number between 0 and 184467
3. shuffle_order_engine: Jest to szablon klasy adaptera silnika, który dostosowuje plik Generator liczb pseudolosowych Silnik wpisz tak, aby liczby były dostarczane w innej kolejności.
Obiekt przechowuje wewnętrznie bufor k wygenerowanych liczb i na żądanie zwraca losowo wybraną liczbę w obrębie bufora, zastępując ją wartością uzyskaną z jego podstawowego silnika.
Algorytm przejścia silnika wybiera wartość z wewnętrznej tabeli (która jest zwracana przez funkcję) i zastępuje ją nową wartością uzyskaną z silnika bazowego.
// 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; }
Wyjście:
9213395 is a random number between 0 and 16777215Utwórz quiz