프로그래밍/C++

[C++]rand, sland 함수

FORHAPPy 2021. 9. 11. 13:22

<난수란?>
랜덤한 수 : 게임에서 다양한 순간에 난수를 받아 활용해야한다.

 

<rand 함수>

rand 함수는 특정 시드값에서 난수를 받아온다. 참고하는 씨드표가 따로 있다.

즉, rand(1) 은 계속 41만 출력된다.

아래와 같이 랜드함수는 결과로 정수 int형을 반환한다.

전달인자가 아무거도 없는 함수인다. ( rand(void) )

0 ~ 32367 (2바이트의 최대 표현범위) 중 하나의 숫자가 반환된다.

rand함수는 사용횟수마다 다른값이 나오는데, 다시 실행하면 같은 값을 반환한다. 

int iRand = rand();

<sland 함수> ****for문 안에서 돌릴 필요없다. 전역변수로 한번만 선언해줘도 시간은 돌아가기 때문이다.****

rand함수에서의 시드값을 바꿔주기 위해 sland 함수가 사용된다.

리턴타입은 없고 전달인자로 정수형 씨드를 준다. 

랜덤 함수인(srand)을 사용하려면 c++에서 <cstdlib>를 헤더를 포함시켜야 합니다

rand함수는 sland 함수에 의존적이다.

양의 정수만 seed로 사용할 수 있습니다.

이 함수를 호출하지 않고 rand함수를 호출하면 srand(1)을 호출하고 rand함수를 호출한 결과랑 같다.

**sland 함수는 인수값은 있고, 반환값은 없는 함수이다.**

void srand(unsigned int seed);

시드값은 어느정도 일정하기 때문에 srand에 시드 값을 넣어 항상 바꿔줘야한다.

일정한 시드값을 넣어주면 또 일정한 값이 아래와 같이 출력된다.

 srand(1);
 int iRand = rand();
41
 srand(2);
 int iRand = rand();
45
 srand(3);
 int iRand = rand();
48
 srand(4);
 int iRand = rand();
51

따라서 time함수를 사용해서 현재 시간에 따라 운영체제가 계속 랜덤한 시간 값을 넣는다.

#include <time.h> 시간 함수를 사용 하려면 시간 값이 정의 되어있는 헤더파일을 include해야 한다.

srand(unsigned(time(NULL))); 
int iRand1 = rand();

컴퓨터의 연산은 빠르기때문에

위와 같은 식을 여러번 복사 붙여넣기 해도 같은 시드값을 넣어준 것으로 인식하고 같은 랜덤값을 처음부터 출력한다.

<time 함수는 1970년 1월1일 부터 흐르는 시간의 값을 넣어준다.>

 

 

'프로그래밍 > C++' 카테고리의 다른 글

[C++]오버로딩  (0) 2021.09.15
[C++]함수범위, 지역변수, 정적변수(static), 전역변수  (0) 2021.09.15
for문(반복문), size_t  (0) 2021.09.10
while (반복문)  (0) 2021.09.10
분기문 (if, switch, goto, while)  (0) 2021.09.10