Random Number Generator (rand & amp; srand) In C++

Hierdie handleiding beskryf die gebruik van funksies rand() en srand() in detail om ewekansige getalle in C++ te genereer:

Baie keer benodig ons die gebruik van ewekansige getalle in ons toepassing om te produseer simulasies of speletjies en ander toepassings wat ewekansige gebeurtenisse vereis.

Byvoorbeeld, in 'n dobbelspel, sonder om ewekansige gebeurtenisse te hê, sal ons dieselfde kant hê wat opduik elke keer as ons die gooi dobbelstene gee daardeur ongewenste resultate.

Dit word dus nodig dat ons 'n ewekansige getalgenerator tot ons beskikking het. In die fisiese omgewing kan ons ewekansige gebeure laat genereer, maar dit is nie moontlik wanneer dit by rekenaars kom nie.

Dit is omdat alles in rekenaars binêr is, dws 0 of 1 (waar of onwaar) en niks tussenin nie. Rekenaars genereer dus gewoonlik voorspelbare gebeurtenisse en is nie in staat om ewekansige gebeurtenisse te genereer nie.

In plaas daarvan simuleer rekenaars ewekansigheid wat gedoen word deur gebruik te maak van pseudo-ewekansige getalgenerator (PRNG) . C++ het 'n ewekansige getalgenerator en kan met baie van die toepassings gebruik word.

In hierdie tutoriaal sal ons die funksies/benaderings om ewekansige getalle in C++ te genereer in detail bespreek.

Pseudo- Random Number Generator (PRNG) In C++

In die algemeen kan 'n pseudo-ewekansige getalgenerator (PRNG) gedefinieer word as 'n program wat 'n saad of 'n begingetal neem en dit transformeer in 'n ander getal wat anders is van saadmet behulp van wiskundige bewerkings.

Hierdie proses word herhaaldelik uitgevoer deur elke keer die laaste gegenereerde getal te neem. Elke keer is die nommer wat gegenereer word nie verwant aan die vorige nommers nie. Hierdie program is dus in staat om 'n reeks getalle te genereer wat ewekansig voorkom.

C++-taal kom met 'n ingeboude pseudo-ewekansige getalgenerator en verskaf twee funksie rand () en srand () wat gebruik kan word om genereer ewekansige getalle.

Kom ons bespreek hierdie twee funksies in detail.

rand En srand Funksies In C++

srand ()

Funksie prototipe: void srand (ongetekende int saad);

Parameters: saad – 'n Heelgetalwaarde wat as saad gebruik moet word deur die pseudo-ewekansige getalgeneratoralgoritme .

Terugwaarde: Geen

Beskrywing: srand-funksie word gebruik om die volgorde van pseudo-ewekansige getalle te inisialiseer met 'n parameter genaamd 'random' saad'. Dit laat die uitset van die randfunksie ewekansig lyk. Andersins sal die uitset van die rand () funksie dieselfde wees elke keer as ons dit noem.

Dus, as ons die ewekansige getalgenerator met die srand () funksie saai, sal dit die kragopwekker vanaf die punt begin dit is afhanklik van die argumentwaarde wat aan srand oorgedra word. As ons die ewekansige getalgenerator stel met die stelseltyd Byvoorbeeld, voor die eerste oproep na die rand () funksie, dan sal dit die ewekansige getalle genereer elke keer as ons dieprogram.

Let daarop dat ons die srand () funksie gewoonlik net een keer moet noem voor die oproep na rand () funksie en nie elke keer as ons ewekansige getalle genereer nie.

rand ( )

Funksie prototipe: int rand (void);

Parameters: geen

Terugkeer waarde: 'n Heelgetalwaarde tussen 0 en RAND_MAX.

Beskrywing: Die rand ()-funksie genereer die volgende ewekansige getal in die ry. Die getal wat gegenereer word, is die pseudo-ewekansige heelgetal tussen 0 en RAND_MAX. RAND_MAX is 'n konstante in die kopskrif wat gewoonlik op waarde 32767 gestel is.

#include  #include  #include  int main() { std::srand(static_cast(std::time(nullptr))); for (int count=1; count = 100; ++count) { std::cout  std::rand()  "\t"; // display 5 random numbers per row if (count % 5 == 0) std::cout  "\n"; } return 0; } 

Uitvoer:

In die bogenoemde program het ons het die eerste 100 ewekansige getalle gegenereer deur stelselklok as die saad vir srand-funksie te gee. In hierdie program het ons beide srand- sowel as randfunksies gebruik. Let daarop dat as gevolg van die stelselklok as saad, die uitset wat gegenereer word elke keer anders sal wees wanneer ons die program uitvoer.

Verskil tussen rand () en srand ()

rand() srand()
Gebruik om ewekansige getalle te genereer. Saai die PRNG wat deur rand ()-funksie gebruik word.
Soveel keer gebel as wat ons wil om die ewekansige getalle te genereer. Slegs een keer gebel om die ewekansige getalgenerator te sien.
Neem geen argumente nie. Neem die parameter wat gebruik word om die ewekansige getalgenerator te saai.
Gee die volgorde vanewekansige getalle elke keer as dit genoem word. Gee nie 'n waarde terug nie.

C++ Random Float

Die rand () funksie wat ons het hierbo gesien, gee by verstek 'n heelgetalwaarde terug wat in sekere gevalle 'n oorloop kan veroorsaak. Ons kan dus dryf- of dubbelwaarde gebruik. Ons kan swewende ewekansige getalle genereer deur die terugkeerwaarde van die rand () funksie na 'sweef' te stel.

Die volgende sal dus 'n ewekansige getal tussen dryf 0.0 en 1.0 genereer (beide ingesluit).

cout

Similarly, the below line will generate a random number between 1.2 and 3.4

cout1.2 + static_cast  (rand()) / ( static_cast  (RAND_MAX/(3.4-1.2)));

In our subsequent example below we make use of random float to generate the output.

C++ Random Number Between 0 And 1

We can use srand () and rand () function to generate random numbers between 0 and 1. Note that we have to cast the output of rand () function to the decimal value either float or double.

The default return value of rand () function i.e. integer is inadequate to display random numbers between 0 and 1 which are fractions.

C++ program given below displays the first five random numbers between 0 and 1.

#include  #include  using namespace std; int main() { cout"Random numbers generated between 0 and 1:"="" ="" cout="" endl;="" for="" i="" i++)="" null="" pre="" rand()="" rand_max="" return="" srand(="" {="" }="" }="">

Output:

We see that the output of the program is the random number between 0 and 1 which are fractions.

If we don’t cast the return value of rand () function to float or double, then we will get 0 as the random number.

C++ Random Number Between 1 And 10

The next example is to generate random numbers between 1 and 10. Following is the C++ program that generates random numbers.

We call the srand function with the system clock and then call the rand function with module 10 operators.

#include  #include  #include  using namespace std; int main() { srand(time(0)); // Initialize random number generator. cout"Random numbers generated between 1 and 10:"="" cout="" for(int="" i="0;i10;i++)" pre="" return="" }="">

Output:

In the above program, we generate the first 10 random numbers between 1 and 10. Note that every time the program is run, it will generate different sets of numbers because of the srand function being called.

Frequently Asked Questions

Q #1) What is the header file for Random function in C++?

Answer: The functions to generate random numbers, rand and srand are defined in cstdlib> header of C++.

Q #2) What is Rand_max in C++?

Answer: RAND_MAX is a constant in header generally set to value 32767. The pseudo-random number generator (PRNG) generates random numbers between 0 to RAND_MAX.

Q #3) How does the random function work?

Answer: C++ supports two random functions i.e. srand () and rand ( ). The function srand () seeds the random number generator used by rand () function which generates the random number sequence depending on the initial seed provided.

Q #4) How do you srand with time?

Answer: The srand function seeds the pseudo-random number generator (PRNG) used by the rand () function. It is a standard practice to use the result of a call to time (0) as seed. This time function returns the value, a number of seconds since 00:00 hours, Jan 1, 1970, UTC (current UNIX timestamp).

Thus the value of seed changes every second. Hence every time when srand is called with time function, a new set of the random numbers is generated.

Conclusion

We have discussed Random Number Generation in detail in this tutorial. Programming languages or in general computers do not generate random numbers as they are designed to give predictive output. Hence, we need to simulate randomness.

In order to simulate randomness, we make use of pseudo-random number generator (PRNG) which is in-built in C++. Thus using the two functions, rand () and srand () we can generate random numbers in C++.

The function srand () is used to provide seed for generating random numbers while rand () function generates the next random number in the sequence.

Rol na bo