독개

[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

블로그의 정보

독한 개발자

#독개#

활동하기