(C++) 5.6 난수 만들기

이준우·2021년 10월 17일
0
post-custom-banner
#include<iostream>

using namespace std;

unsigned int PRNG()
{
	static unsigned int seed = 5523;

	seed = 8253729 * seed + 2396403;

	return seed % 32768;
}

int main()
{
	for (int count = 1; count <= 100; ++count)
	{
		cout << PRNG() << "\t";

		if (count % 5 == 0) cout << endl;
	}

	return 0;
	
}

컴퓨터가 임의로 난수를 만들어내진 않는다. 다른 user가 만들어 놓은 난수 코드를 사용하는 것일 뿐이다. C++에도 이러한 기능을 하는 헤더파일이 있는데, #include <cstdlib> 에 넣어져 있다.

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
	std::srand(5523);

	for (int count = 1; count <= 100; ++count)
	{
		cout << std::rand() << "\t";

		if (count % 5 == 0) cout << endl;
	}

	return 0;
	
}

사용자가 함수를 사용하여 만드는 것도 좋지만, 이런식으로 이미 만들어져 있는 난수 함수를 사용하는 것이 더 편리하지 않을까 싶다. 여기서 확인해야 할 것은 두가지이다.

srand() 와 rand()의 차이점
srand() : () 안에 seed를 넣어준다. seed값이 같으면 나오는 난수값은 동일하다.
rand() : 난수를 생성해준다.

그럼 seed값을 계속해서 바꾸고 싶을 땐 어떤 방법이 있는가? 에 대해서는 시간을 이용한 방법이 있다.

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
	//std::srand(5523);
	std::srand(static_cast<unsigned int>(std::time(0)));

	for (int count = 1; count <= 100; ++count)
	{
		cout << std::rand() << "\t";

		if (count % 5 == 0) cout << endl;
	}

	return 0;
	
}

profile
꿈꾸는 CV
post-custom-banner

0개의 댓글