random number generator c
이 자습서에서는 C ++에서 난수를 생성하기 위해 rand () 및 srand () 함수를 자세히 설명합니다.
시뮬레이션이나 게임 및 임의 이벤트가 필요한 기타 응용 프로그램을 생성하기 위해 응용 프로그램에서 난수를 사용해야하는 경우가 많습니다.
예를 들면 주사위 게임에서 임의의 이벤트가없는 경우 주사위를 던질 때마다 같은면이 나타나서 바람직하지 않은 결과를 제공합니다.
따라서 우리가 처리 할 수있는 난수 생성기가 필요합니다. 물리적 환경에서는 임의의 이벤트가 생성 될 수 있지만 컴퓨터에서는 불가능합니다.
이것은 컴퓨터의 모든 것이 바이너리 즉, 0 또는 1 (참 또는 거짓)이고 그 사이에 아무것도 없기 때문입니다. 따라서 컴퓨터는 일반적으로 예측 가능한 이벤트를 생성하고 임의의 이벤트를 생성 할 수 없습니다.
대신 컴퓨터는 다음을 사용하여 수행되는 임의성을 시뮬레이션합니다. 의사 난수 생성기 (PRNG) . C ++에는 난수 생성기가 있으며 많은 응용 프로그램에서 사용할 수 있습니다.
이 튜토리얼에서는 C ++에서 난수를 생성하는 함수 / 접근법에 대해 자세히 설명합니다.
학습 내용 :
- C ++의 PRNG (Pseudo-Random Number Generator)
- C ++의 rand 및 srand 함수
- rand ()와 srand ()의 차이점
- C ++ 임의 부동 소수점
- 0과 1 사이의 C ++ 난수
- 1과 10 사이의 C ++ 난수
- 자주 묻는 질문
- 결론
- 추천 도서
C ++의 PRNG (Pseudo-Random Number Generator)
일반적으로 의사 난수 생성기 (PRNG)는 시드 또는 시작 번호를 가져와 수학 연산을 사용하여 시드와 다른 다른 수로 변환하는 프로그램으로 정의 할 수 있습니다.
이 프로세스는 매번 마지막으로 생성 된 번호를 사용하여 반복적으로 수행됩니다. 생성 된 번호는 이전 번호와 관련이 없습니다. 따라서이 프로그램은 무작위로 나타나는 일련의 숫자를 생성 할 수 있습니다.
C ++ 언어는 내장 된 의사 난수 생성기와 함께 제공되며 난수를 생성하는 데 사용할 수있는 두 개의 함수 rand () 및 srand ()를 제공합니다.
이 두 기능에 대해 자세히 살펴 보겠습니다.
헬프 데스크 기술자 인터뷰 질문 및 답변 pdf
C ++의 rand 및 srand 함수
srand ()
기능 프로토 타입 : void srand (unsigned int seed);
매개 변수 : seed – 의사 난수 생성기 알고리즘에서 시드로 사용할 정수 값입니다.
반환 값 : 없음
기술: srand 함수는 '랜덤 시드'라는 매개 변수를 사용하여 의사 난수 시퀀스를 초기화하는 데 사용됩니다. rand 함수의 출력이 무작위로 보이게합니다. 그렇지 않으면 rand () 함수의 출력은 호출 할 때마다 동일합니다.
따라서 srand () 함수로 난수 생성기를 시드하면 srand에 전달 된 인수 값에 종속 된 지점에서 생성기를 시작합니다. 시스템 시간으로 난수 생성기를 설정하면 예를 들면 rand () 함수를 처음 호출하기 전에 프로그램을 실행할 때마다 난수를 생성합니다.
난수를 생성 할 때마다가 아니라 rand () 함수를 호출하기 전에 일반적으로 srand () 함수를 한 번만 호출해야합니다.
랜드 ()
기능 프로토 타입 : int rand (무효);
매개 변수 : 없음
반환 값 : 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() << ' '; // display 5 random numbers per row if (count % 5 == 0) std::cout << '
'; } return 0; }
산출:
위의 프로그램에서 우리는 시스템 클럭을 srand 함수의 시드로 제공하여 처음 100 개의 난수를 생성했습니다. 이 프로그램에서는 srand 함수와 rand 함수를 모두 사용했습니다. 시스템 클럭이 시드이기 때문에 생성 된 출력은 프로그램을 실행할 때마다 달라집니다.
rand ()와 srand ()의 차이점
열() | srand () |
---|---|
난수를 생성하는 데 사용됩니다. | rand () 함수에서 사용하는 PRNG를 시드합니다. |
난수를 생성하려는 횟수만큼 호출됩니다. | 난수 생성기를보기 위해 한 번만 호출됩니다. |
어떤 논쟁도하지 않습니다. | 난수 생성기를 시드하는 데 사용되는 매개 변수를 사용합니다. |
호출 될 때마다 난수 시퀀스를 반환합니다. | 값을 반환하지 않습니다. |
C ++ 임의 부동 소수점
위에서 본 rand () 함수는 기본적으로 특정 경우에 오버플로를 일으킬 수있는 정수 값을 반환합니다. 따라서 float 또는 double 값을 사용할 수 있습니다. rand () 함수의 반환 값을 'float'로 캐스팅하여 부동 난수를 생성 할 수 있습니다.
따라서 다음은 float 0.0과 1.0 (둘 다 포함) 사이의 난수를 생성합니다.
cout< 마찬가지로 아래 줄은 1.2에서 3.4 사이의 난수를 생성합니다.
cout<<1.2 + static_cast (rand()) / ( static_cast (RAND_MAX/(3.4-1.2)));
아래의 후속 예에서는 임의의 부동 소수점을 사용하여 출력을 생성합니다.
0과 1 사이의 C ++ 난수
srand ()와 rand () 함수를 사용하여 0과 1 사이의 난수를 생성 할 수 있습니다. rand () 함수의 출력을 float 또는 double의 10 진수 값으로 캐스팅해야합니다.
rand () 함수의 기본 반환 값, 즉 정수는 분수 인 0과 1 사이의 난수를 표시하기에 부적절합니다.
아래 주어진 C ++ 프로그램은 0과 1 사이의 처음 5 개의 난수를 표시합니다.
C ++ 초 동안 기다립니다
#include #include using namespace std; int main() { cout<<'Random numbers generated between 0 and 1:'< 산출 :
프로그램의 출력은 분수 인 0과 1 사이의 난수임을 알 수 있습니다.
rand () 함수의 반환 값을 float 또는 double로 변환하지 않으면 임의의 숫자로 0을 얻습니다.
1과 10 사이의 C ++ 난수
다음 예제는 1에서 10 사이의 난수를 생성하는 것입니다. 다음은 난수를 생성하는 C ++ 프로그램입니다.
시스템 클럭으로 srand 함수를 호출 한 다음 모듈 10 연산자로 rand 함수를 호출합니다.
#include #include #include using namespace std; int main() { srand(time(0)); // Initialize random number generator. cout<<'Random numbers generated between 1 and 10:'< 산출:
위의 프로그램에서 1과 10 사이의 처음 10 개의 난수를 생성합니다. 프로그램이 실행될 때마다 호출되는 srand 함수로 인해 다른 숫자 세트가 생성됩니다.
자주 묻는 질문
Q # 1) C ++에서 랜덤 함수의 헤더 파일은 무엇인가요?
대답: 난수, rand 및 srand를 생성하는 함수는< cstdlib > C ++의 헤더.
Q # 2) C ++에서 Rand_max는 무엇입니까?
답 : RAND_MAX 일반적으로 32767 값으로 설정된 헤더의 상수입니다. PRNG (pseudo-random number generator)는 0에서 RAND_MAX 사이의 난수를 생성합니다.
Q # 3) 랜덤 함수는 어떻게 작동하나요?
대답: C ++는 두 가지 임의 함수를 지원합니다. srand () 및 rand (). srand () 함수는 제공된 초기 시드에 따라 난수 시퀀스를 생성하는 rand () 함수에서 사용하는 난수 생성기를 시드합니다.
Q # 4) 시간과 함께 어떻게 srand를하나요?
대답: srand 함수는 rand () 함수에서 사용하는 의사 난수 생성기 (PRNG)를 시드합니다. 시간 (0) 호출의 결과를 시드로 사용하는 것이 표준 관행입니다. 이 시간 함수는 UTC (현재 UNIX 타임 스탬프) 1970 년 1 월 1 일 00:00시 이후의 초 수 값을 반환합니다.
따라서 씨앗의 가치는 매초마다 변합니다. 따라서 srand가 time 함수로 호출 될 때마다 새로운 난수 세트가 생성됩니다.
결론
이 튜토리얼에서 난수 생성에 대해 자세히 설명했습니다. 프로그래밍 언어 또는 일반적으로 컴퓨터는 예측 출력을 제공하도록 설계되었으므로 난수를 생성하지 않습니다. 따라서 무작위성을 시뮬레이션해야합니다.
임의성을 시뮬레이션하기 위해 C ++에 내장 된 PRNG (pseudo-random number generator)를 사용합니다. 따라서 rand ()와 srand ()라는 두 함수를 사용하여 C ++에서 난수를 생성 할 수 있습니다.
srand () 함수는 난수 생성을위한 시드를 제공하는 데 사용되며 rand () 함수는 시퀀스에서 다음 난수를 생성합니다.
=> 여기에서 전체 C ++ 교육 시리즈를 찾아보십시오.
추천 도서