본문 바로가기
개발 언어/cpp

cpp 난수 생성 (random number generation) : PRNG

by eeeun:) 2022. 1. 8.
반응형

컴퓨터는 일반적으로 난수를 생성할 수 없음!!

그래서 의사 난수 생성기를 통해 난수 생성 코드를 짜 보자👊

 

의사 난수 생성기(pseudo-random number generator: PRNG)

시드(seed)라고 하는 시작 번호를 가지고 시드와 전혀 다른 번호로 변환하기 위해 수학 연산을 수행하는 프로그램

곱하기와 더하기 같은 수학 연산을 통해 오버플로우를 발생시켜 난수를 만든다!

 

	// 벡터의 인덱스의 값을 난수로 받을것이기에 unsigned int 사용!
	unsigned int PRNG(unsigned int range) {
		// 처음 시드는 큰 수(오버플로우가 날 수 있도록)로 임의로 지정
		// static으로 seed를 두어 계산되어있는 시드를 재사용할 수 있도록 함 -> 난수가 동일하게 나오는 것을 방지
		static unsigned int seed = 8936;
		// 계산을 통해 오버플로우가 날 수 있도록 함!
		seed = 3847520 * seed + 23847952;
		// 시드를 range로 나눈 나머지 = 0 ~ range의 사이의 값을 반환 
		return seed % range;
		}
728x90

댓글