- 의사- 난수 생성기(PRNG) C++
- C++의 rand 및 srand 함수
- rand()와 srand()의 차이점
- C++ Random Float
- C++ Random Number Between 0 And 1
- C++ Random Number Between 1 And 10
- Frequently Asked Questions
- Conclusion
이 자습서에서는 C++에서 난수를 생성하기 위한 rand() 및 srand() 함수의 사용법을 자세히 설명합니다.
응용 프로그램에서 난수를 사용하여 임의의 이벤트가 필요한 시뮬레이션이나 게임 및 기타 애플리케이션.
예를 들어 주사위 게임에서 임의의 이벤트가 없으면 주사위를 던질 때마다 같은 면이 나타납니다. 따라서 바람직하지 않은 결과를 제공하는 주사위입니다.
따라서 우리는 마음대로 사용할 수 있는 난수 생성기가 필요합니다. 물리적 환경에서는 임의의 이벤트를 생성할 수 있지만 컴퓨터에서는 불가능합니다.
컴퓨터의 모든 것이 이진법, 즉 0 또는 1(참 또는 거짓)이고 그 사이에는 아무 것도 없기 때문입니다. 따라서 컴퓨터는 일반적으로 예측 가능한 이벤트를 생성하며 무작위 이벤트를 생성할 수 없습니다.
대신 컴퓨터는 PRNG(의사 난수 생성기)를 사용하여 수행되는 무작위성을 시뮬레이트합니다. . C++에는 난수 생성기가 있으며 많은 응용 프로그램에서 사용할 수 있습니다.
이 자습서에서는 C++에서 난수를 생성하는 기능/접근 방식에 대해 자세히 설명합니다.
의사- 난수 생성기(PRNG) C++
일반적으로 의사 난수 생성기(PRNG)는 시드 또는 시작 번호를 가져와서 다른 숫자로 변환하는 프로그램으로 정의할 수 있습니다. 씨앗에서수학적 연산을 사용합니다.
이 프로세스는 매번 마지막으로 생성된 숫자를 취하여 반복적으로 수행됩니다. 매번 생성된 숫자는 이전 숫자와 관련이 없습니다. 따라서 이 프로그램은 무작위로 보이는 일련의 숫자를 생성할 수 있습니다.
C++ 언어에는 의사 난수 생성기가 내장되어 있으며 rand() 및 srand()라는 두 함수를 제공합니다. 난수를 생성합니다.
이 두 함수에 대해 자세히 살펴보겠습니다.
C++의 rand 및 srand 함수
srand ()
함수 프로토타입: void srand (unsigned int seed);
매개변수: seed – 의사 난수 생성 알고리즘에서 시드로 사용할 정수 값 .
반환 값: 없음
설명: srand 함수는 'random'이라는 매개 변수를 사용하여 의사 난수 시퀀스를 초기화하는 데 사용됩니다. 씨앗'. rand 함수의 출력을 무작위로 보이게 합니다. 그렇지 않으면 rand() 함수의 출력은 호출할 때마다 동일합니다.
따라서 srand() 함수로 난수 생성기를 시드하면 해당 지점에서 생성기를 시작합니다. 이는 srand에 전달된 인수 값에 따라 다릅니다. rand() 함수를 처음 호출하기 전에 시스템 시간 예를 들어 로 난수 생성기를 설정하면 다음을 실행할 때마다 난수를 생성합니다.program.
일반적으로 rand() 함수를 호출하기 전에 srand() 함수를 한 번만 호출해야 하며 난수를 생성할 때마다 호출하지 않아도 됩니다.
rand( )
함수 프로토타입: int rand (void);
매개변수: 없음
반환 값: 0과 RAND_MAX 사이의 정수 값입니다.
설명: rand() 함수는 시퀀스에서 다음 난수를 생성합니다. 생성된 숫자는 0과 RAND_MAX 사이의 의사 난수 정수입니다. RAND_MAX는 일반적으로 값 32767로 설정되는 헤더의 상수입니다.
#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; }
출력:
위 프로그램에서 srand 함수의 시드로 시스템 시계를 제공하여 처음 100개의 난수를 생성했습니다. 이 프로그램에서는 srand와 rand 함수를 모두 사용했습니다. 시드로 시스템 클럭 때문에 프로그램을 실행할 때마다 생성되는 출력이 다를 수 있습니다.
rand()와 srand()의 차이점
rand() | srand() |
---|---|
난수를 생성하는 데 사용됩니다. | rand() 함수에서 사용하는 PRNG를 시드합니다. |
난수 생성을 원하는 만큼 호출합니다. | 난수 생성기를 보기 위해 한 번만 호출합니다. |
아무 인수도 취하지 않습니다. | 난수 생성기를 시드하는 데 사용되는 매개변수를 취합니다. |
다음 시퀀스를 반환합니다.호출될 때마다 임의의 숫자를 반환합니다. | 값을 반환하지 않습니다. |
C++ Random Float
Rand() 함수는 위에서 본 것은 기본적으로 특정 경우에 오버플로를 일으킬 수 있는 정수 값을 반환합니다. 따라서 float 또는 double 값을 사용할 수 있습니다. rand() 함수의 반환 값을 'float'로 캐스팅하여 float 난수를 생성할 수 있습니다.
따라서 다음은 float 0.0과 1.0(둘 다 포함) 사이의 난수를 생성합니다.
coutSimilarly, 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.