共用方式為


subtract_with_carry_engine 類別

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

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
    長延隔。 決定所產生數列中的週期。

Members

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 一樣快,且具有高品質的結果。

此引擎使用週期關聯 (period) x(i) = (x(i - R) - x(i - S) - cy(i - 1)) mod M 來產生使用者指定之不帶正負號整數類型的值,其中,如果 x(i - S) - x(i - R) - cy(i - 1) < 0,則 cy(i) 的值為 1,否則為 0,而 M 的值為 2W。 引擎的狀態是一個進位指標加上 R 值。 這些值包含已至少呼叫 operator() R 次時所傳回的最後一個 R 值,否則為已傳回的 N 值,以及種子的最後一個 R - N 值。

範本引數 UIntType 必須夠大,才能保留最多 M - 1 個值。

雖然您可以直接從此引擎建構產生器,但您也可以使用下表中其中一個預先定義的 typedefs。

名稱

描述

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 文章:延隔 Fibonacci 產生器 (英文)。

需求

標頭:<random>

命名空間: std

請參閱

參考

<random>