Udostępnij za pośrednictwem


subtract_with_carry_engine — Klasa

Generuje losową sekwencję przez algorytm odejmowania z przenoszeniem (z opóźnieniem Fibonacciego).

Składnia

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

Parametry

UIntType
Typ wyniku niepodpisanej liczby całkowitej. Aby uzyskać informacje o możliwych typach, zobacz losowe>.<

W
Rozmiar programu Word. Rozmiar każdego wyrazu w bitach sekwencji stanu. Warunek wstępny: 0 < W ≤ numeric_limits<UIntType>::digits

S
Krótkie opóźnienie. Liczba wartości całkowitych. Warunek wstępny: 0 < S < R

R
Długie opóźnienie. Określa cykl w wygenerowanej serii.

Elementy członkowskie

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_seed jest stałą składową zdefiniowaną jako 19780503u, używaną jako domyślna wartość parametru dla subtract_with_carry_engine::seed i konstruktora pojedynczej wartości.

Aby uzyskać więcej informacji na temat składowych aparatu, zobacz losowe>.<

Uwagi

Szablon substract_with_carry_engine klasy jest ulepszeniem linear_congruential_engine. Ani dla tych silników nie jest tak szybki, jak i z tak wysokiej jakości wyników, jak mersenne_twister_engine.

Ten aparat generuje wartości typu całkowitoliczbowego określonego przez użytkownika przy użyciu relacji cyklu (okres), x(i) = (x(i - R) - x(i - S) - cy(i - 1)) mod Mgdzie cy(i) ma wartość , jeśli x(i - S) - x(i - R) - cy(i - 1) < 0, w przeciwnym razie 0, i M ma wartość 21W. Stan silnika jest wskaźnikiem przenoszenia i wartościami języka R. Te wartości składają się z ostatnich zwracanych wartości języka R , jeśli operator() są wywoływane co najmniej razy R , w przeciwnym razie N zwracane wartości i ostatnie R - N wartości nasion.

Argument UIntType szablonu musi być wystarczająco duży, aby przechowywać wartości do M - 1.

Chociaż generator z tego aparatu można skonstruować bezpośrednio, można również użyć jednej z tych wstępnie zdefiniowanych definicji typów:

ranlux24_base: używany jako podstawa dla elementu ranlux24. typedef subtract_with_carry_engine<unsigned int, 24, 10, 24> ranlux24_base;

ranlux48_base: używany jako podstawa dla elementu ranlux48. typedef subtract_with_carry_engine<unsigned long long, 48, 5, 12> ranlux48_base;

Aby uzyskać szczegółowe informacje na temat odejmowania z algorytmem aparatu przenoszenia, zobacz artykuł w Wikipedii Lagged Fibonacci generator.

Wymagania

Nagłówek:<losowy>

Przestrzeń nazw: std

Zobacz też

<losowy>