[C++] 5.9 난수만들기 random, rand(), srand()
by #독개#/*
컴퓨터는 랜덤숫자를 만들수가 없다
그래서 랜덤처럼 보이는 숫자를 만들뿐이다
std::rand() , std::srand()
random 라이브러리
*/
#include <iostream>
#include <cstdlib> //std::rand() , std::srand()
#include <ctime> //std::time()
#include <random> //c++ 11부터 들어왔는데 ahk에 random(1,6) 이런거 1~6중에 하나의 랜덤숫자 골라줌
using namespace std;
//설명하자면 static 변수이므로 처음에만 5223이고 그뒤에는 초기화 하지 않으므로 값이 바뀐다
//그래서 계속 seed가 바뀌며 연산하면서 마치 랜덤처럼 보이는 숫자를 만든다
//하지만 첫 시작 seed가 고정이므로 늘 값들은 같다
//이러한 함수를 미리 라이브러리로 만들어둔게 srand()함수이고, seed값을 매번바꾸기위해 현재시간을 활용한다
unsigned int PRNG() // 랜덤함수 직접제작
{
static unsigned int seed = 5223;
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; //5개마다 줄바꿈
}
cout << endl;
cout << endl;
///------------------------------------------------------------------------
//srand는 seed를 설정해주는것 실제값은 rand()로 가져옴
std::srand(static_cast<unsigned int>(std::time(0)));
//랜덤함수를 디버깅할땐 시드를 고정시키고 디버깅해야 편하다 srand(45);
for (int i = 1; i <= 100; i++)
{
cout << std::rand() << "\t";
if (i % 5 == 0) cout << endl;
}
///------------------------------------------------------------------------
//random 쓰는건데 필요할때 찾아보자
std::random_device rd;
std::mt19937 mersenne(rd());
std::uniform_int_distribution<> dice(1, 6);
for (int count = 1; count <= 20; ++count)
cout << dice(mersenne) << endl;
return 0;
}
🐱👓독하게 개발
'🔥 프로그래밍 학습 > C++' 카테고리의 다른 글
[C++] 6.1 배열 Array 기초#1 (0) | 2022.11.14 |
---|---|
[C++] 5.10 std::cin 더 잘 활용하기 (0) | 2022.11.14 |
[C++] 5.8 break,continue (0) | 2022.11.14 |
[C++] 5.7 반복문 for (0) | 2022.11.14 |
[C++] 5.5 반복문 while (1) | 2022.11.14 |
블로그의 정보
독한 개발자
#독개#