Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 난수 생성하기 – srand()와 rand() 함수 완벽 정리

C++에서 난수(random number)를 생성하는 방법을 알아보겠습니다. 이 글에서는 0부터 특정 값까지의 범위에서 난수를 생성하는 방법을 다루며, 예제 프로그램에서는 상한값을 100으로 설정했습니다.

난수 생성을 위해 C 표준 라이브러리에 포함된 srand() 함수를 사용합니다. 이 함수는 void srand(unsigned int seed) 형태로 선언되며, rand() 함수가 사용하는 난수 생성기의 시드(seed) 값을 초기화하는 역할을 합니다.

srand() 함수의 선언

void srand(unsigned int seed)

srand() 함수는 seed라는 매개변수 하나를 받습니다. 이 값은 의사난수(pseudo-random number) 생성 알고리즘이 난수열을 만들기 시작하는 기준점으로 사용되는 정수입니다. 이 함수는 별도의 반환값이 없습니다(void).

실제 난수 값을 얻기 위해서는 rand() 함수가 필요합니다. 0부터 최대값 사이의 숫자를 얻으려면 나머지 연산자(%)를 사용해 max 값으로 나눈 나머지를 구하면 됩니다.

시드 값으로는 time(0) 함수의 반환 결과를 srand()에 전달합니다. time(0)은 현재 시간을 초 단위로 반환하므로, 프로그램을 실행할 때마다 서로 다른 시드 값이 적용되어 매번 새로운 난수가 생성됩니다. 만약 시드를 고정하면 실행할 때마다 동일한 난수열이 출력되므로 주의해야 합니다.

예제 코드

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
main() {
   int max;
   max = 100; // 난수 생성 범위의 상한값을 100으로 설정
   srand(time(0));
   cout << "생성된 난수: " << rand() % max;
}

실행 결과 1

생성된 난수: 51

실행 결과 2

생성된 난수: 29

실행 결과 3

생성된 난수: 47

참고: 현대 C++의 난수 생성 방식

C++11 이후에는 <random> 헤더를 통해 Mersenne Twister 엔진, uniform_int_distribution 등 더 정교하고 통계적으로 우수한 난수 생성 기능을 제공합니다. 간단한 실습이나 학습 목적에는 srand()/rand() 조합으로 충분하지만, 암호화나 고품질 시뮬레이션처럼 난수의 품질이 중요한 경우에는 <random> 라이브러리 사용을 권장합니다.