logo

tilfældig overskrift i C++ | Sæt 1 (Generatorer)

Denne overskrift introducerer tilfældige talgenereringsfaciliteter. Dette bibliotek gør det muligt at producere tilfældige tal ved hjælp af kombinationer af generatorer og distributioner.

    Generatorer: Objekter, der genererer ensartet fordelte tal.
  • Fordelinger : Objekter, der transformerer talsekvenser genereret af en generator til talsekvenser, der følger en specifik tilfældig variabel fordeling såsom ensartet normal eller binomial.

Generatorer

I. Pseudo-tilfældige tal-motorer: De bruger en algoritme til at generere tilfældige tal baseret på et indledende frø. Disse er:



tilfældige talmotorer' title=

1. lineær_kongruentiel_motor : Det er den enkleste motor i STL-biblioteket, der genererer tilfældige heltal uden fortegn. Det følger: 

java streng ind i array
 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 tilfældige tal.min:Det giver minimumsværdien returneret af medlemsoperatør().max:Det giver den maksimale værdi, der returneres af medlemsoperatøren().
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; } 

Produktion:

211182246 is a random number between 1 and 2147483646

2. mersenne_twister_engine: Det er en tilfældig talmotor baseret på Mersenne Twister-algoritmen. Det producerer tilfældige heltal uden fortegn af høj kvalitet i intervallet [0 (2^w)-1].
hvor 'w' er ordstørrelse: Antal bits af hvert ord i tilstandssekvensen. 

    operatør():Det genererer det tilfældige tal.min:Det returnerer minimumsværdien returneret af member operator(), som for mersenne_twister_engine altid er nul.max:Det returnerer den maksimale værdi, der returneres af member operator(), som for mersenne_twister_engine er 2w-1 (hvor 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; } 

Produktion:

3348201622 is a random number between 0 and 4294967295

3. subtract_with_carry_engine: Det er en pseudo-tilfældig talgenerator, der producerer heltal uden fortegn.
Den anvendte algoritme er en lagged fibonacci generator med en tilstandssekvens af r heltalselementer plus én bæreværdi.

    operatør(): Det genererer det tilfældige tal.max: Det returnerer den maksimale værdi, der returneres af medlemsoperator(), som er (2^w)-1 for subtract_with_carry_engine, hvor 'w' er ordstørrelsen.min: Det returnerer minimumsværdien returneret af medlemsoperatør(), som altid er nul 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; } 

Produktion:

8606455 is a random number between 0 and 16777215


II. Generator af tilfældige tal : Det er en tilfældig talgenerator, der producerer ikke-deterministiske tilfældige tal.

    random_device: Det er den sande tilfældige talgenerator.operatør(): Det returnerer et nyt tilfældigt tal.min: Det returnerer minimumsværdien returneret af member operator(), som for random_device altid er nul.max: Det returnerer den maksimale værdi, der returneres af 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; } 

Produktion:

default random_device characteristics: minimum: 0 maximum: 4294967295 entropy: 0 a random number: 3705944883

III. Pseudo-tilfældige tal-motorer (instanseringer) : Dette er de særlige eksempler på generatormotorer og adaptere:

int parseint

Pseudo-tilfældige tal-motorer (instanseringer)' title=

1. default_random_engine : Dette er en motorklasse med tilfældige tal, der genererer pseudo-tilfældige tal.

    min: Det returnerer minimumsværdien givet af operator().max: Det returnerer den maksimale værdi givet af operator().operatør(): Det returnerer et nyt tilfældigt tal.
    Funktionen ændrer den interne tilstand med en, som ændrer tilstandsværdien i henhold til den givne algoritme:
 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;  }  

Produktion:

201066682 is a random number between 1 and 2147483646

2. minstd_rand: Det genererer pseudo-tilfældige tal; det ligner lineær kongruential generator

    operatør():Det returnerer et nyt tilfældigt tal. Funktionen ændrer den interne tilstand med en, som ændrer tilstandsværdien 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:Det returnerer minimumsværdien givet af medlemsoperatør().max:Det returnerer den maksimale værdi givet af medlemsoperator(), som for lineær_kongruentiel_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;  } 

Produktion:

java multithreading
489592737 is a random number between 1 and 2147483646

3.MT19937: Det er Mersenne Twister 19937 generator. Det er en pseudo-tilfældig generator af 32-bit tal med en tilstandsstørrelse på 19937 bit.

    operatør():Det genererer et tilfældigt tal. Funktionen ændrer den interne tilstand ved at bruge en overgangsalgoritme, der producerer et twist på det valgte element.max:Det returnerer den maksimale værdi givet af operator().min:Det returnerer minimumsværdien givet af 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;  } 

Produktion:

1445431990 is a random number between 0 and 4294967295

4. ranlux24_base: Det er Ranlux 24 base generator. Det er en subtract-with-carry pseudo-tilfældig generator af 24-bit tal, der generelt bruges som basismotor for ranlux24-generatoren.

    operatør():Det returnerer et nyt tilfældigt tal.
    Funktionen ændrer den interne tilstand ved at kalde dens overgangsalgoritme, som anvender en subtract-with-carry-operation på elementet.max:Det returnerer den maksimale værdi givet af operator().min:Det returnerer minimumsværdien givet af 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<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;  }  

Produktion:

7275352 is a random number between 0 and 16777215

Tilsvarende format gælder for de andre eksempler.

IV. Motoradaptere

tilfældig overskrift i C++ | Sæt 1 (Generatorer)

1. discard_block_engine: Det er en motoradapterklasseskabelon, der tilpasser en pseudo-tilfældigt tal generator Engine type ved kun at bruge 'r'-elementer i hver blok af 'p'-elementer fra den sekvens, den producerer, og kassere resten.
Adapteren holder en intern optælling af, hvor mange elementer der er blevet produceret i den aktuelle blok.

Standard generatorer ranlux24 og ranlux48 tilpasse a subtract_with_carry_engine ved at bruge denne adapter.

    operatør():Det returnerer et nyt tilfældigt tal.max:Det returnerer den maksimale værdi givet af operator().min:Det returnerer minimumsværdien givet af 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;  }  

Produktion:

8132325 is a random number between 0 and 16777215

2. independent_bits_engine: Det er en motoradapterklasseskabelon, der tilpasser en pseudo-tilfældigt tal generator Engine type for at producere tilfældige tal med et bestemt antal bit (w).

    operatør():Det returnerer et nyt tilfældigt tal.
    Motorens overgangsalgoritme kalder basismotorens operator()-medlem så mange gange som nødvendigt for at opnå nok signifikante bit til at konstruere en tilfældig værdi.max:Det returnerer den maksimale værdi givet af operator().min:Det returnerer minimumsværdien givet af 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<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;  }  

Produktion:

zeenat aman skuespiller
13551674127875514537 is a random number between 0 and 184467

3. shuffle_order_engine: Det er en motoradapterklasseskabelon, der tilpasser en pseudo-tilfældigt tal generator Engine type, så numrene leveres i en anden rækkefølge.
Objektet beholder en buffer med k genererede tal internt, og når det anmodes om det, returnerer det et tilfældigt udvalgt tal i bufferen, der erstatter det med en værdi opnået fra dets basismotor.

    operatør():Det returnerer et nyt tilfældigt tal.
    Motorens overgangsalgoritme vælger en værdi i den interne tabel (som returneres af funktionen) og erstatter den med en ny værdi opnået fra dens basismotor.max:Det returnerer den maksimale værdi givet af operator().min:Det returnerer minimumsværdien givet af 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;  }  

Produktion:

9213395 is a random number between 0 and 16777215
Opret quiz