tilfeldig overskrift i C++ | Sett 1 (Generatorer)

tilfeldig overskrift i C++ | Sett 1 (Generatorer)

Denne overskriften introduserer tilfeldige tallgenereringsfasiliteter. Dette biblioteket gjør det mulig å produsere tilfeldige tall ved å bruke kombinasjoner av generatorer og distribusjoner.

    Generatorer : Objekter som genererer jevnt fordelte tall.
  • 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:

tilfeldige tallmotorer

1. lineær_kongruensiell_motor : Det er den enkleste motoren i STL-biblioteket som genererer tilfeldige usignerte heltall. Det følger: 

 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  
    operatør(): Det genererer tilfeldige tall. min: Det gir minimumsverdien returnert av medlemsoperatør(). maks: Det gir den maksimale verdien returnert av medlemsoperatør().
C++
   // 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. 

    operatør(): Den genererer det tilfeldige tallet. min: Den returnerer minimumsverdien returnert av medlemsoperatør() som for mersenne_twister_engine alltid er null. maks: Den returnerer den maksimale verdien returnert av medlemsoperatør() som for mersenne_twister_engine er 2w-1 (der w er ordstørrelsen).
C++
   // 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.

    operatør() : Den genererer det tilfeldige tallet. maks : Den returnerer den maksimale verdien returnert av medlemsoperator() som er (2^w)-1 for subtract_with_carry_engine der 'w' er ordstørrelsen. min : Den returnerer minimumsverdien returnert av medlemsoperatør() som alltid er null for subtract_with_carry_engine.
C++
   // 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.

    random_device : Det er den sanne tilfeldige tallgeneratoren. operatør() : Det returnerer et nytt tilfeldig tall. min : Den returnerer minimumsverdien returnert av medlemsoperatør() som for random_device alltid er null. maks : Den returnerer den maksimale verdien returnert av medlemsoperatør().
C++
   // 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:

Pseudo-tilfeldige tallmotorer (instansiasjoner)

1. default_random_engine : Dette er en motorklasse for tilfeldige tall som genererer pseudo-tilfeldige tall.

    min : Den returnerer minimumsverdien gitt av operator(). maks : Den returnerer den maksimale verdien gitt av operator(). operatør() : Det returnerer et nytt tilfeldig 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 parameter  
C++
   // 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

    operatør(): Det returnerer et nytt tilfeldig tall. Funksjonen endrer den interne tilstanden med en som endrer tilstandsverdien i henhold til følgende algoritme:
x = (a.x + c) mod m where x= current state value a c and m=class template parameter 
    min: Den returnerer minimumsverdien gitt av medlemsoperatør(). maks: Den returnerer den maksimale verdien gitt av medlemsoperatør() som for lineær_kongruentiell_motor er (modul-1).
C++
   // 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:

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.

    operatør(): Det genererer et tilfeldig tall. Funksjonen endrer den interne tilstanden ved å bruke en overgangsalgoritme som produserer en vri på det valgte elementet. maks: Den returnerer den maksimale verdien gitt av operator(). min: Den returnerer minimumsverdien gitt av operator().
     
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.

    operatør(): Det returnerer et nytt tilfeldig tall.
    Funksjonen endrer den interne tilstanden ved å kalle dens overgangsalgoritme som bruker en subtract-with-carry-operasjon på elementet. maks: Den returnerer den maksimale verdien gitt av operator(). min: Den returnerer minimumsverdien gitt av operator().
C++
   // 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   <  unsigned    24    10    24  >     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

tilfeldig overskrift i C++ | Sett 1 (Generatorer)

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.

    operatør(): Det returnerer et nytt tilfeldig tall. maks: Den returnerer den maksimale verdien gitt av operator(). min: Den returnerer minimumsverdien gitt av operator().
C++
   // 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).

    operatør(): Det returnerer et nytt tilfeldig tall.
    Motorens overgangsalgoritme påkaller basismotorens operator()-medlem så mange ganger som nødvendig for å oppnå nok signifikante biter til å konstruere en tilfeldig verdi. maks: Den returnerer den maksimale verdien gitt av operator(). min: Den returnerer minimumsverdien gitt av operator().
C++
   // 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   <  mt19937    64    uint_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:

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.

    operatør(): Det returnerer et nytt tilfeldig tall.
    Motorens overgangsalgoritme velger en verdi i den interne tabellen (som returneres av funksjonen) og erstatter den med en ny verdi hentet fra basismotoren. maks: Den returnerer den maksimale verdien gitt av operator(). min: Den returnerer minimumsverdien gitt av operator().
C++
   // 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 16777215 
Lag quiz