random_subtract_with_carry_engine
random_subtract_with_carry_engine (차입 뺄셈 엔진)
std::subtract_with_carry_engine은 차입 뺄셈(subtract with carry) 알고리즘을 사용하는 난수 엔진이에요. C++11부터 사용할 수 있어요.
출처: cppreference
본문
<random> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.
template<
class UIntType,
std::size_t w, std::size_t s, std::size_t r
> class subtract_with_carry_engine;
(since C++11)
차입 뺄셈(subtract with carry) 알고리즘을 사용하는 난수 엔진이에요.
템플릿 매개변수 (Template parameters)
- UIntType — 결과 타입. unsigned short, unsigned int, unsigned long, unsigned long long 중 하나가 아니면 효과는 정의되지 않아요.
- w — 상태 시퀀스의 비트 단위 단어 크기
- s — 짧은 지연(short lag)
- r — 긴 지연(long lag)
w가 [1, std::numeric_limits
생성기 속성 (Generator properties)
subtract_with_carry_engine의 상태 크기는 O(r)이고, 각 상태는 두 부분으로 구성돼요:
- [0, 2^w)의 r개 정수 값으로 된 시퀀스 X.
- 값이 0 또는 1인 정수 c (캐리(carry)라고 알려짐).
Xⱼ가 X의 j mod r번째 값(0부터 시작)을 나타낸다고 할 때, subtract_with_carry_engine의 전이 알고리즘 TA(xᵢ)는 다음과 같이 정의돼요:
- X'ⱼ = Xⱼ₋ₛ - Xⱼ₋ᵣ - c로 하고, 만약 Xⱼ₋ₛ < Xⱼ₋ᵣ + c이면 캐리를 1로 설정하고 X'ⱼ에 2^w를 더해요. 그 외에는 캐리를 0으로 설정해요. (자세한 알고리즘은 원문 참고)
멤버 함수 (Member functions)
- (constructor) — 엔진 생성
- seed — 상태 설정
- 생성: operator() — 다음 난수 생성; discard — 상태 진행
- 특성: min [static] — 가장 작은 생성 값; max [static] — 가장 큰 생성 값
미리 정의된 생성기 (Predefined)
std::ranlux24_base와 std::ranlux48_base가 이 엔진의 파라미터화된 인스턴스예요.