C++/Library
2021. 3. 11. 16:32
난수 생성 (Random Number Generation)
Linear congruential generator
-
- 널리 알려진 유사난수 생성기이다.
unsigned int PRNG() // Pseudo Random Number Generator { static unsigned int seed = 5523; // seed number seed = 8253729 * seed + 2396403; return (seed % 32768); }
std::rand
std::rand()
함수로 나올 수 있는 최댓값인RAND_MAX
를 이용하여 범위를 제한한다.- 고르게 분포되지는 않는다.
#include <iostream> int getRandomNumber(int min, int max) { static const double fraction = 1.0 / (RAND_MAX + 1.0); return (min + static_cast<int>((max - min + 1) * \ std::rand() * fraction)); } int main() { using namespace std; for (int i = 0; i < 10; ++i) cout << getRandomNumber(5, 8) << '\n'; }
<random>
C++11
위의 경우들보다 더 정교하다.
-
난수 발생 속도가 빠르고 메모리를 적게 차지한다.
난수 발생 주기(똑같은 숫자가 발생하는 주기)가 메르센 소수인
2^19937 - 1
이라서 이름이mt19937
이다.참고 : 케이플러스
#include <iostream> #include <random> int main() { using namespace std; random_device rd; mt19937 mersenne(rd()); uniform_int_distribution<> dice(1, 6); for (int i = 0; i < 10; ++i) cout << dice(mersenne) << endl; }
'C++ > Library' 카테고리의 다른 글
C++ cin.ignore (0) | 2021.03.11 |
---|---|
C++ cin (0) | 2021.03.11 |
C++ 입력 버퍼 무시하기 (0) | 2021.03.10 |
C++ typeinfo (0) | 2021.03.10 |
C++ 출력 버퍼 비우기 (0) | 2021.03.10 |