본문 바로가기
컴퓨터 언어/C\C++

[c언어] rand(), srand() 랜덤함수는 무엇인가? (난수 생성)

by SuperMemi 2020. 4. 2.
반응형

1. rand()

 

- C 언어 <stdlib.h> / C++ <cstdlib>

- [0 ~ RAND_MAX] 사이의 랜덤한 숫자를 반환한다.

- 만약 범위를 조절하고 싶다면? %연산자를 이용한다. %: 나누었을때 나머지

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

    rand() %10     // [0 ~ 9]   
    rand() %100    // [0 ~ 99]
    rand() %1000   // [0 ~ 999]
    ...

RAND_MAX를 10으로 나눈 나머지라고 생각해보면 간단하다

[0~9]의 값을 반환한다.

- rand()값은 정확히 말해서 난수를 발생시키는 것이 아니라 내부에 저장된 난수표에서 seed값에 따라 단수를 뽑아 오는 것 뿐이다. 기본적으로 seed는 1이다.

- 이를 해결하기 위하여 아래의 함수를 사용한다.

 

2. srand(seed)

 

- C 언어 <stdlib.h> / C++ <cstdlib>

- seed를 통하여 난수를 초기화시킬 수 있는 것이다.

- 프로그램을 실행시킬 때마다 time을 이용하여 seed값을 갱신시켜서 난수를  만들 수 있다.

 

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
	
    // seed값으로 현재의 시간(초)를 입력한다.
    srand((unsigned int)time(0));
    rand() %10     // [0 ~ 9]   
    rand() %100    // [0 ~ 99]
    rand() %1000   // [0 ~ 999]
    ...

 


참고

https://mrw0119.tistory.com/57

https://blockdmask.tistory.com/308

사진

https://www.geeksforgeeks.org/c-programming-language/

반응형