random_philox_engine

random_philox_engine (필록스 엔진)

std::philox_engine은 카운터 기반 난수 엔진이에요. 작은 상태와 긴 주기를 가지며, 대규모 병렬 난수 생성이 필요한 몬테카를로 시뮬레이션용으로 설계되었어요. C++26부터 사용할 수 있어요.

출처: cppreference

본문

<random> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.

template<
    class UIntType, std::size_t w, std::size_t n, std::size_t r,
    UIntType... consts
>
class philox_engine;

(since C++26)

std::philox_engine은 카운터 기반 난수 엔진이에요.

템플릿 매개변수 (Template parameters)

  • UIntType — 결과 타입. unsigned short, unsigned int, unsigned long, unsigned long long 중 하나가 아니면 효과는 정의되지 않아요.
  • w — 비트 단위 단어 크기
  • n — 단어 수
  • r — 라운드 수
  • consts — 난수 생성에 사용되는 승수와 라운드 상수의 시퀀스

다음 값 중 하나라도 true가 아니면 프로그램은 ill-formed예요:

  • sizeof...(consts) == n
  • n == 2 || n == 4
  • 0 < r
  • 0 < w && w <= std::numeric_limits::digits

생성기 속성 (Generator properties)

아래에서 Qᵢ는 시퀀스 Q의 i번째 요소를 나타내며, 첨자는 0부터 시작해요.

philox_engine의 상태 크기는 O(n)이고, 각 상태는 네 부분으로 구성돼요:

  • [0, 2^w)의 n개 정수 값으로 된 시퀀스 X.
  • 이 시퀀스는 큰 부호 없는 정수 카운터 값을 나타내요.

멤버 함수 (Member functions)

  • (constructor) — 엔진 생성
  • seed — 상태 설정
  • 생성: operator() — 다음 난수 생성; discard — 상태 진행
  • 특성: min [static] — 가장 작은 생성 값; max [static] — 가장 큰 생성 값

미리 정의된 생성기 (Predefined)

std::philox4x32std::philox4x64가 이 엔진의 파라미터화된 인스턴스예요.

더 알아보기 (Learn more)

cppreference