#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;
}