Denne overskriften introduserer tilfeldige tallgenereringsfasiliteter. Dette biblioteket gjør det mulig å produsere tilfeldige tall ved å bruke kombinasjoner av generatorer og distribusjoner.
- Distribusjoner : Objekter som transformerer tallsekvenser generert av en generator til tallsekvenser som følger en spesifikk tilfeldig variabelfordeling som uniform normal eller binomial.
Generatorer
I. Pseudo-tilfeldige tallmotorer: De bruker en algoritme for å generere tilfeldige tall basert på et første frø. Disse er:

1. lineær_kongruensiell_motor : Det er den enkleste motoren i STL-biblioteket som genererer tilfeldige usignerte heltall. Det følger:
generisitet i java
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; }
Produksjon:
211182246 is a random number between 1 and 2147483646
2. mersenne_twister_engine: Det er en tilfeldig tallmotor basert på Mersenne Twister-algoritmen. Den produserer tilfeldige heltall uten fortegn av høy kvalitet i intervallet [0 (2^w)-1].
hvor 'w' er ordstørrelse: Antall biter av hvert ord i tilstandssekvensen.
// 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; }
Produksjon:
3348201622 is a random number between 0 and 4294967295
3. subtrahere_med_bæremotor: Det er en pseudo-tilfeldig tallgenerator som produserer heltall uten fortegn.
Algoritmen som brukes er en lagged fibonacci generator med en tilstandssekvens av r heltallselementer pluss én bæreverdi.
// 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; }
Produksjon:
8606455 is a random number between 0 and 16777215
II. Tilfeldig tallgenerator : Det er en tilfeldig tallgenerator som produserer ikke-deterministiske tilfeldige tall.
// 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; }
Produksjon:
default random_device characteristics: minimum: 0 maximum: 4294967295 entropy: 0 a random number: 3705944883
III. Pseudo-tilfeldige tallmotorer (instansiasjoner) : Dette er de spesielle forekomstene av generatormotorer og adaptere:
int parseint

1. default_random_engine : Dette er en motorklasse for tilfeldige tall som genererer pseudo-tilfeldige tall.
Funksjonen endrer den interne tilstanden med en som modifiserer tilstandsverdien i henhold til den gitte algoritmen:
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; }
Produksjon:
201066682 is a random number between 1 and 2147483646
2. minstd_rand: Den genererer pseudo-tilfeldige tall; det ligner på lineær kongruensgenerator
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; }
Produksjon:
telle distinkt
489592737 is a random number between 1 and 2147483646
3.MT19937: Det er Mersenne Twister 19937 generator. Det er en pseudo-tilfeldig generator med 32-bit tall med en tilstandsstørrelse på 19937 biter.
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; }
Produksjon:
1445431990 is a random number between 0 and 4294967295
4. ranlux24_base: Det er Ranlux 24 base generator. Det er en subtraher-med-bær pseudo-tilfeldig generator av 24-bits tall som vanligvis brukes som basismotor for ranlux24-generatoren.
Funksjonen endrer den interne tilstanden ved å kalle dens overgangsalgoritme som bruker en subtract-with-carry-operasjon på elementet.
// 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; }
Produksjon:
7275352 is a random number between 0 and 16777215
Lignende format er aktuelt for de andre eksemplene.
IV. Motoradaptere

1. discard_block_engine: Det er en motoradapterklassemal som tilpasser en pseudo-tilfeldig tallgenerator Motor skriv ved å bruke bare 'r'-elementer i hver blokk med 'p'-elementer fra sekvensen den produserer og forkaster resten.
Adapteren holder en intern telling over hvor mange elementer som er produsert i gjeldende blokk.
Standard generatorer ranlux24 og ranlux48 tilpasse a subtrahere_med_bæremotor ved å bruke denne adapteren.
// 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; }
Produksjon:
8132325 is a random number between 0 and 16777215
2. independent_bits_engine: Det er en motoradapterklassemal som tilpasser en pseudo-tilfeldig tallgenerator Motor type for å produsere tilfeldige tall med et spesifikt antall biter (w).
Motorens overgangsalgoritme påkaller basismotorens operator()-medlem så mange ganger som nødvendig for å oppnå nok signifikante biter til å konstruere en tilfeldig verdi.
// 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; }
Produksjon:
hva er mac os
13551674127875514537 is a random number between 0 and 184467
3. shuffle_order_engine: Det er en motoradapterklassemal som tilpasser en pseudo-tilfeldig tallgenerator Motor skriv slik at tallene leveres i en annen rekkefølge.
Objektet holder en buffer med k genererte tall internt og returnerer et tilfeldig valgt tall i bufferen når det blir bedt om det, og erstatter det med en verdi hentet fra basismotoren.
Motorens overgangsalgoritme velger en verdi i den interne tabellen (som returneres av funksjonen) og erstatter den med en ny verdi hentet fra basismotoren.
// 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; }
Produksjon:
9213395 is a random number between 0 and 16777215Lag quiz