Namespaces
Variants

std:: subtract_with_carry_engine

From cppreference.net
ヘッダーで定義 <random>
template <

class UIntType,
std:: size_t w, std:: size_t s, std:: size_t r

> class subtract_with_carry_engine ;
(C++11以降)

subtract with carry アルゴリズムを使用する乱数生成エンジンです。

目次

テンプレートパラメータ

UIntType - ジェネレータによって生成される結果の型。これが unsigned short unsigned int unsigned long 、または unsigned long long のいずれでもない場合、動作は未定義です。
w - 状態シーケンスのワードサイズ(ビット単位)
s - ショートラグ
r - ロングラグ

w [ 1 , std:: numeric_limits < UIntType > :: digits ] の範囲内にない場合、または s [ 1 , r ) の範囲内にない場合、プログラムは不適格です。

ジェネレータのプロパティ

subtract_with_carry_engine の状態の サイズ O(r) であり、各状態は2つの部分から構成されます:

  • 整数値のシーケンス X (長さ r )、各値は [ 0 , 2 w
    )
    の範囲内
  • 整数 c キャリー として知られる)、その値は 0 または 1 のいずれか

X j j mod r 番目(0から開始)の値を表すものとすると、 X 遷移アルゴリズム である subtract_with_carry_engine TA(x i ) )は以下のように定義されます:

  1. Y X i-s -X i-r -c と定義する。
  2. y Y mod 2 w
    とし、 X i y に設定する。
  3. Y が負の場合、 c 1 に設定し、それ以外の場合 c 0 に設定する。

subtract_with_carry_engine 生成アルゴリズム GA(x i ) = y で表され、ここで y は遷移アルゴリズムのステップ2で生成される値です。

事前定義された特殊化

以下の特殊化は、よく使用される2つのパラメータセットを持つ乱数生成エンジンを定義します:

ヘッダーで定義 <random>
定義
ranlux24_base (C++11) std :: subtract_with_carry_engine < std:: uint_fast32_t , 24 , 10 , 24 >
ranlux48_base (C++11) std :: subtract_with_carry_engine < std:: uint_fast64_t , 48 , 5 , 12 >

ネスト型

定義
result_type UIntType

データメンバ

constexpr std::size_t word_size
[static]
w
(公開静的メンバ定数)
constexpr std::size_t short_lag
[static]
s
(公開静的メンバ定数)
constexpr std::size_t long_lag
[static]
r
(公開静的メンバ定数)
constexpr std::uint_least32_t default_seed
[static]
19780503u
(公開静的メンバ定数)

メンバー関数

構築とシード設定
エンジンを構築する
(公開メンバ関数)
エンジンの現在の状態を設定する
(公開メンバ関数)
生成
エンジンの状態を進め、生成された値を返す
(公開メンバ関数)
指定された量だけエンジンの状態を進める
(公開メンバ関数)
特性
[static]
出力範囲の最小値を取得する
(公開静的メンバ関数)
[static]
出力範囲の最大値を取得する
(公開静的メンバ関数)

非メンバー関数

(C++11) (C++11) (removed in C++20)
二つの擬似乱数生成エンジンの内部状態を比較する
(関数)
擬似乱数生成エンジンに対するストリーム入出力を実行する
(関数テンプレート)

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 3809 C++11 default_seed
result_type で表現できない可能性がある
その型を
std::uint_least32_t に変更