C++ random()함수와 seed란?

Joosi_Cool·2022년 6월 28일
3

C++

목록 보기
5/20
post-thumbnail

🐣random()란?

이는 값을 무작위로 값을 주는 함수이다. 하지만 이는 실제로 무작위로 주는 것은 아니다. 실제로는 무작위 숫자 테이블이란 것이 존재하여, 이를 리턴하는 것이다.


이때 생길 수 있는 문제가 숫자 테이블은 항상 일정하기 때문에, 프로그램을 실행할 때마다 동일한 랜덤숫자가 나올 수 있다. 이를 해결하기 위한 방법이 seed이다. 이 값은 랜덤 값 테이블에서 시작지점을 의미한다. 이를 지정하는 밥법은 srand(seed값); 으로 지정해주면 된다.

#include<iostream>
#include<iomanip>
#include<cstdlib>
using namespace std;


int main() {

	unsigned int seed{ 0 };

	cout << "Enter seed: ";
	cin >> seed;
	srand(seed);

	for (unsigned int counter{ 1 }; counter <= 10; ++counter) {
		cout << setw(10) << (1 + rand() % 6);
		if (counter % 5 == 0) {
			cout << endl;
		}
	}

	return 0;
} 

이처럼 seed값을 달리 함에 따라 랜던 값 테이블의 시작지점이 달리짐으로 랜덤값도 다르게 나온다. 또한 seed를 67로 동일함하게 함에따라 랜덤 숫자의 값과 순서가 동일하게 나오는 것을 볼 수 있다.

+추가
srand(seed값)을 선언해줄 때, time(0)을 통해 seed값을 계속 변하게 해줄 수 있다. time(0)는 현재시간을 1970년 1월1일 기준으로 몇초 지났는지 알려주는 함수이다. 이를 이용하여 값을 계속해서 변하게 해줄 수 있다. for문과 같은 반복문을 사용할때는 이를 반복문 밖에서 선언하는 것이 좋다. 왜냐하면 time(0)은 초를 기준으로 하는데 반복문이 1초안에 끝날 수도 있기 때문에 이는 제대로 된 랜덤 숫자를 불러오지 못할 것이다.

profile
집돌이 FE개발자의 노트

0개의 댓글