名前空間
変種
操作

std::subtract_with_carry_engine

From cppreference.com
< cpp‎ | numeric‎ | random
 
 
 
 
 
ヘッダー <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 shortunsigned intunsigned long、またはunsigned long longのいずれでもない場合、動作は未定義です。
w - 状態シーケンスのワードサイズ(ビット単位)
s - 短いラグ
r - 長いラグ

もし w[1std::numeric_limits<UIntType>::digits] になく、または s[1r) にない場合、プログラムは形式エラーとなります。

[編集] ジェネレータのプロパティ

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

  • 整数値 X のシーケンスで、r 個の値があり、各値は [02w
    )
    の範囲にあります。
  • 整数 c(「キャリー」として知られる)で、その値は 0 または 1 です。

XjXj mod r番目の値(0から始まる)とすると、subtract_with_carry_engine遷移アルゴリズムTA(xi))は次のように定義されます。

  1. YXi-s-Xi-r-c とします。
  2. yY mod 2w
    とし、X_iy に設定します。
  3. もし Y が負であれば、c1 に設定し、そうでなければ c0 に設定します。

subtract_with_carry_engine生成アルゴリズムGA(xi) = 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
(公開静的メンバ定数)

[編集] メンバ関数

構築とシード
エンジンを構築します。
(public member function) [編集]
エンジンの現在の状態を設定します。
(public member function) [編集]
生成
エンジンの状態を進め、生成された値を返す
(public member function) [編集]
指定された量だけエンジンの状態を進めます。
(public メンバ関数) [編集]
特性
[static]
出力範囲の最小値を返します。
(public static member function) [編集]
[static]
出力範囲の最大値を返します。
(public static member function) [編集]

[編集] 非メンバ関数

(C++11)(C++11)(C++20で削除)
2つの擬似乱数エンジンの内部状態を比較します。
(関数) [編集]
疑似乱数エンジンのストリーム入出力を実行
(関数テンプレート) [編集]

[編集]

[編集] 不具合報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 3809 C++11 default_seed
result_type で表現できない場合がある
型が変更された
std::uint_least32_t
English 日本語 中文(简体) 中文(繁體)