본문 바로가기

Language, IDE/C, C++

[C++] 랜덤함수 - 난수 생성기

C++ 랜덤 함수 - 난수 생성기

 

C++에는 <cstdlib> 라는 헤더파일에 rand라는 난수 생성 함수가 있다.

rand()함수를 호출하면 0에서 RAND_MAX까지의 정수 1개를 리턴한다.

 

 

 

위 결과를 보면 rand함수를 5번 실행한 경우와 10번 실행한 경우에 1~5번째 값이 같다.

그리고 실행할때마다 계속해서 위와 같은 결과가 나오게 된다.

 

rand함수는 시드(seed)라는 값에의해 생성되므로 시드값을 설정을 해주지 않아 같은 시드값으로 실행이되어 위와같은 현상이 나타난다.

이를 해결하기 위해서 srand함수를 이용하여 시드값을 설정해주어야 한다.

 

 

 

srand로 시드값을 10으로 설정해준 결과와 5를 설정해준 결과가 다르게 나타난다.

하지만 같은 시드값으로 재실행을 하면 같은 결과가 나온다. 프로그래머가 실행할때마다 시드값을 직접 지정을 할 수 없으므로 보통 srand에 인자에 ctime라이브러리의 time함수를 추가해준다.

 

 

실행결과를 보면 실행할때 마다 결과가 다르게 나온다.

 

난수들을 보면 결과값이 0~RAND_MAX사이의 값이 나오므로 매우 큰수들이 나온다.

(RAND_MAX는 시스템마다 다르지만 두바이트로 나타낼수 있는 수인 32767보다는 항상 크다)

따라서 이 값을 원하는 범위내에서 나오게 하기위해 modular연산을 이용한다.

 

 

 

rand() % M을 하면 0~(M-1)까지의 수가 생성된다.

rand() % M + N을 하면 N~(M+N-1)까지의 수가 생성된다.

 

rand() % 100이면 0~99까지의 수가 생성됨. ( 0 ~ (100-1) )

rand() % 100 + 1이면 1~100까지의 수가 생성됨. ( 1 ~ (100+1-1) )

 

rand() % 96 + 5이면 5~100까지의 수가 생성됨. ( 5 ~ (96+5-1) )

 

 

 

1~100까지 표현하기

 

요약

랜덤함수 - 난수 생성

 

필요 라이브러리 <cstdlib>, <ctime>

 

N~(M+N-1)까지의 난수 생성하기

srand((unsigned int)time(NULL));

rand() % M + N

 

1~100까지의 난수 생성하기

srand((unsigned int)time(NULL));

rand() % 100 + 1

 


'Language, IDE > C, C++' 카테고리의 다른 글

[C++] 프렌드 함수  (0) 2013.06.28
[C++] 클래스 디폴트 접근 제어자  (0) 2013.06.26
[C++] .연산자와 ::연산자  (0) 2013.06.26
[C++] 디폴트 인자  (0) 2013.06.26
[C++] 매개변수  (0) 2013.06.25
[C++] 랜덤함수 - 난수 생성기  (7) 2013.06.25