본문 바로가기

Stupid Computer/2. C 언어

[C/C++] 난수 생성하기 rand(), srand()함수 사용! 랜덤 숫자 생성하기 !


 

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

rand()함수를 호출하면 0에서 RAND_MAX(32767) 까지의 정수 1개를 리턴해요

 

 

 

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

또 실행할때마다 계속해서 위와 같은 결과가 나오게 되구요~ 

 

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

이를 해결하기 위해서 srand함수를 이용하여 시드값을 설정해주면 잘 해결되요~

 

 

 

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

하지만 같은 시드값으로 재실행을 하면 같은 결과가 나와요. 

저희가 실행할때마다 시드값을 직접 지정을 할 수 없으므로 보통 srand에 인자에 ctime라이브러리의 time함수를 추가해주면 잘 되요.

 

 

실행결과를 보면 실행할때 마다 결과가 다르게 나오게 되죠?? 해보시면 알아요 ! 

 

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

(RAND_MAX는 시스템마다 다르긴 하다)


따라서 이 값을 원하는 범위내에서 나오게 하기위해 나머지 연산(%) 을 이용하면 됩니당~.

 

 

 

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) )