Share via


subtract_with_carry_engine 類別

使用帶進位減法 (延隔 Fibonacci) 演算法,以產生隨機序列。

語法

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_seed 是一個成員常數,定義為 19780503u,用做 subtract_with_carry_engine::seed 的預設參數值以及單一值建構函式。

如需引擎成員的詳細資訊,請參閱 <隨機>

備註

類別substract_with_carry_engine範本是linear_congruential_engine改進。 但這些引擎都不像 mersenne_twister_engine 一樣快,且具有高品質的結果。

此引擎會使用週期關聯 (period) 產生使用者指定之未帶正負號整數型別的值,如果 cy(i) 為 ,則為 x(i - S) - x(i - R) - cy(i - 1) < 01 ,否則0為 ,且 M 具有值 2W。x(i) = (x(i - R) - x(i - S) - cy(i - 1)) mod M引擎的狀態是攜帶指標加上 R 值。 如果至少呼叫了 R 次,則這些值是由最後一個傳回的 R 值所組成,否則N傳回operator()的值和種子的最後一個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;

如需與攜帶引擎演算法減去的詳細資訊,請參閱維琪百科文章 Lagged Fibonacci 產生器

需求

標頭:<random>

命名空間:std

另請參閱

<random>