Share via


subtract_with_carry_engine 클래스

subtract-with-carry(지연된 피보나치) 알고리즘을 사용하여 임의 시퀀스를 생성합니다.

구문

template <class UIntType, size_t W, size_t S, size_t R>
class subtract_with_carry_engine;

매개 변수

UIntType
부호가 없는 정수 결과 형식입니다. 가능한 형식은 임>의 형식을 참조하세요<.

W
단어 크기. 상태 시퀀스의 각 단어 크기입니다(비트). 사전 조건: 0 < W ≤ numeric_limits<UIntType>::digits

S
짧은 지연. 정수 값의 개수입니다. 사전 조건: 0 < S < R

R
긴 지연. 되풀이가 연속으로 발생했는지 확인합니다.

멤버

subtract_with_carry_engine::subtract_with_carry_engine subtract_with_carry_engine::max
subtract_with_carry_engine::min
subtract_with_carry_engine::discard
subtract_with_carry_engine::operator()
subtract_with_carry_engine::seed

default_seed19780503u로 정의된 멤버 상수로, subtract_with_carry_engine::seed 및 단일 값 생성자의 기본 매개 변수 값으로 사용됩니다.

엔진 멤버에 대한 자세한 내용은 임>의를 참조<하세요.

설명

substract_with_carry_engine 클래스 템플릿은 linear_congruential_engine 비해 개선되었습니다. 이러한 엔진 둘 다 mersenne_twister_engine만큼 빠르거나 품질 결과가 뛰어나지 않습니다.

이 엔진은 되풀이 관계(마침표)x(i) = (x(i - R) - x(i - S) - cy(i - 1)) mod M를 사용하여 사용자 지정 부호 없는 정수 계열 형식의 값을 생성합니다. 여기서 cy(i)1 은 ifx(i - S) - x(i - R) - cy(i - 1) < 0이고 그렇지 않으면 0M2이 W입니다. 엔진의 상태는 캐리 표시기 및 R 값입니다. 이러한 값은 R번 이상 호출된 경우 operator() 반환된 마지막 R 값으로 구성되며, 그렇지 않으면 N 반환된 값과 시드의 마지막 R - N 값으로 구성됩니다.

템플릿 인수 UIntType은 최대 M - 1까지 값을 보유할 수 있도록 충분히 커야 합니다.

엔진에서 직접 생성기를 생성할 수 있더라도 아래의 미리 정의된 typedef 중 하나를 사용할 수 있습니다.

ranlux24_base: ranlux24에 대한 기준으로 사용됩니다. typedef subtract_with_carry_engine<unsigned int, 24, 10, 24> ranlux24_base;

ranlux48_base: ranlux48에 대한 기준으로 사용됩니다. typedef subtract_with_carry_engine<unsigned long long, 48, 5, 12> ranlux48_base;

캐리 엔진 알고리즘을 사용하는 빼기에 대한 자세한 내용은 Wikipedia 문서 지연 피보나치 생성기를 참조하세요.

요구 사항

헤더:<random>

네임스페이스: std

참고 항목

<random>