반응형
컴퓨터는 일반적으로 난수를 생성할 수 없음!!
그래서 의사 난수 생성기를 통해 난수 생성 코드를 짜 보자👊
의사 난수 생성기(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
'개발 언어 > cpp' 카테고리의 다른 글
CPP struct class 기본 액세스 한정자 (0) | 2022.01.17 |
---|---|
uint32_t 자료형이란? (0) | 2022.01.14 |
cpp 멤버 이니셜라이저(Member Initializer) (0) | 2022.01.03 |
cpp static const 변수 (0) | 2022.01.03 |
cpp 멤버 함수 안에서 자신과 동일한 클래스 객체 private 멤버 접근 (0) | 2021.12.30 |
댓글