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::philox4x32과 std::philox4x64가 이 엔진의 파라미터화된 인스턴스예요.