다음을 통해 공유


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
    부호가 없는 정수 결과 형식입니다. 가능한 형식은 <random>을 참조하세요.

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

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

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

멤버

subtract_with_carry_engine::subtract_with_carry_engine

subtract_with_carry_engine::min

subtract_with_carry_engine::discard

subtract_with_carry_engine::operator()

subtract_with_carry_engine::max

subtract_with_carry_engine::seed

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

엔진 멤버에 대한 자세한 내용은 <random>을 참조하세요.

설명

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입니다. x(i - S) - x(i - R) - cy(i - 1) < 0인 경우 이 값이 1입니다. 그렇지 않으면 0입니다. M의 값은 2W입니다. 엔진의 상태는 전달 표시기 + 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;

subtract-with-carry 엔진 알고리즘에 대한 자세한 내용은 Wikipedia 문서 지연된 피보나치 생성기를 참조하세요.

요구 사항

헤더: <random>

네임스페이스: std

참고 항목

참조

<random>