random_linear_congruential_engine
random_linear_congruential_engine (선형 합동 엔진)
std::linear_congruential_engine은 선형 합동 생성기(LCG)에 기반한 난수 엔진이에요. C++11부터 사용할 수 있어요.
출처: cppreference
본문
<random> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.
template<
class UIntType,
UIntType a,
UIntType c,
UIntType m
> class linear_congruential_engine;
(since C++11)
linear_congruential_engine은 선형 합동 생성기(LCG)에 기반한 난수 엔진이에요.
템플릿 매개변수 (Template parameters)
- UIntType — 생성기가 생성하는 결과 타입. unsigned short, unsigned int, unsigned long, unsigned long long 중 하나가 아니면 효과는 정의되지 않아요.
- a — 곱셈 항
- c — 증가 항
- m — 계수 항
m이 0이 아닐 때 a >= m 또는 c >= m이 true이면 프로그램은 ill-formed예요.
생성기 속성 (Generator properties)
linear_congruential_engine의 상태 크기는 1이고, 각각은 하나의 정수로 구성돼요.
실제 계수 m₀는 다음과 같이 정의돼요:
- m이 0이 아니면 m₀는 m이에요.
- m이 0이면 m₀는
std::numeric_limits<result_type>::max()에 1을 더한 값이에요 (즉 m₀는 result_type으로 표현될 필요가 없어요).
linear_congruential_engine의 전이 알고리즘은 TA(xᵢ) = (a·xᵢ + c) mod m₀ 이에요.
linear_congruential_engine의 생성 알고리즘은 GA(xᵢ) = (a·xᵢ + c) mod m₀ 이에요.
멤버 함수 (Member functions)
- (constructor) — 엔진 생성
- seed — 상태 설정
- 생성: operator() — 다음 난수 생성; discard — 상태 진행
- 특성: min [static] — 가장 작은 생성 값; max [static] — 가장 큰 생성 값
미리 정의된 생성기 (Predefined)
std::minstd_rand0와 std::minstd_rand이 이 엔진의 파라미터화된 인스턴스예요.