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_rand0std::minstd_rand이 이 엔진의 파라미터화된 인스턴스예요.

더 알아보기 (Learn more)

cppreference