[C++] 난수 생성하기

Doorbals·2023년 1월 3일
0

CPP

목록 보기
3/16

1. rand() 함수

  • rand() 함수는 0 ~ 32767 사이의 랜덤 정수를 반환한다.
  • 하지만 프로그램을 여러 번 재실행시켜도 결과가 동일하게 출력된다.

2. srand() 함수

  • 위처럼 계속 같은 값이 나오는 이유는 rand() 함수의 경우 특정 seed값을 기준으로 특정 공식을 이용해 난수를 생성하므로, 시드값이 같다면 계속 동일한 결과가 나올 수 밖에 없는 것이다.
  • 때문에 시드값을 변경해주어야 기존과 다른 값을 생성할 수 있는데, 이 시드값을 변경해주는 함수가 바로 srand()이다.
	srand(2);
	cout << rand() << endl;
	cout << rand() << endl;
	cout << rand() << endl;

	출력 결과 : 
	45
	29216
	24198
  • 하지만 위처럼 srand()의 인수로 고정값을 전달해준다면 결국 또 항상 같은 값이 출력된다.
    때문에 이를 해결하기 위해 srand()의 인수로 항상 변화하는 값을 넣어주어야 한다.

3. time() 함수

  • time(NULL)은 UCT 기준 1970년 1월 1일 0시 0분 0초 부터 경과된 시간을 초 단위로 반환한다.
  • 때문에 매초마다 변화하므로 srand(time(NULL))과 같이 사용해 실행할 때마다 다른 시드값으로 초기화한다면 rand()는 매번 다른 값을 반환하게 된다.
	srand(time(NULL));
	cout << rand() << endl;
	cout << rand() << endl;
	cout << rand() << endl;

4. 난수의 범위 제한하기

  • 만약 반환되는 난수의 범위를 조정하고 싶으면 '%'(나머지) 연산자를 사용하면 된다.
  • rand()가 반환한 값을 원하는 숫자로 % 연산하면 0 ~ (해당 숫자 - 1) 범위의 난수를 만들 수 있다.
	srand(time(NULL));
	cout << rand() % 3 << endl;
	cout << rand() % 3 << endl;
	cout << rand() % 3 << endl;
	cout << rand() % 3 << endl;

profile
게임 클라이언트 개발자 지망생의 TIL

0개의 댓글