C++ 命名需求: RandomNumberDistribution (自 C++11 起)
來自 cppreference.com
一個 RandomNumberDistribution 是一個函式物件,根據機率密度函式 p(x) 或離散機率分佈 P(xi) 返回隨機數。
[編輯] 要求
型別 D
滿足 RandomNumberDistribution,如果
-
D
滿足 CopyConstructible -
D
滿足 CopyAssignable
給定
-
T
,由 D::result_type 命名的型別 -
P
,由 D::param_type 命名的型別,它
- 滿足 CopyConstructible
- 滿足 CopyAssignable
- 滿足 EqualityComparable
- 具有與
D
的每個建構函式(接受對應於分佈引數的引數)相同的建構函式。 - 具有與
D
的每個返回分佈引數的成員函式相同的名稱、型別和語義的成員函式 - 宣告一個成員 typedef using distribution_type = D;
-
d
,一個型別為D
的值 -
x
和y
,(可能為 const)型別為D
的值 -
p
,一個(可能為 const)型別為P
的值 -
g
、g1
、g2
,滿足 UniformRandomBitGenerator 型別的左值 -
os
,std::basic_ostream 特化型別的左值 -
is
,std::basic_istream 特化型別的左值
以下表達式必須有效並具有其指定的效果
表示式 | 型別 | 注意 | 複雜度 |
---|---|---|---|
D::result_type |
T |
一個算術型別 | 編譯時 |
D::param_type |
P |
編譯時 | |
D() |
建立一個與任何其他預設構造的 D 無法區分的分佈 |
常量 | |
D(p) |
建立一個與直接從用於構造 p 的值構造的 D 無法區分的分佈 |
與 p 的構造相同 | |
d.reset() |
void |
重置分佈的內部狀態。對 d 的下一次 operator() 呼叫將不依賴於 reset() 之前任何引擎產生的值 |
常量 |
x.param() |
P |
返回 p ,使得 D(p).param() == p |
不比 D(p) 差 |
d.param(p) |
void |
後置條件: d.param() == p | 不比 D(p) 差 |
d(g) |
T |
使用相同 g 連續呼叫此函式所返回的數字序列,按照 d.param() 引數化的分佈隨機分佈 |
對 g 的平攤常數次呼叫 |
d(g,p) |
T |
使用相同 g 連續呼叫此函式所返回的數字序列,按照 p 引數化的分佈隨機分佈 |
對 g 的平攤常數次呼叫 |
x.min() |
T |
由 x 的 operator() 可能返回的值的最大下界,由 x 引數的當前值決定 |
常量 |
x.max() |
T |
由 x 的 operator() 可能返回的值的最小上界,由 x 引數的當前值決定 |
常量 |
x == y |
bool |
建立等價關係。如果 x.param() == y.param() 並且只要 g1 == g2,重複呼叫 x(g1) 和 y(g2) 將生成的未來無限值序列相等,則返回 true |
常量 |
x != y |
bool |
!(x == y) |
常量 |
os << x |
os 型別的引用 |
將分佈引數和內部狀態的文字表示寫入 os 。os 的格式標誌和填充字元保持不變 |
|
is >> d |
is 型別的引用 |
從 is 讀取資料以恢復分佈引數和內部狀態。is 的格式標誌保持不變。資料必須使用具有相同區域設定、CharT 和 Traits 流模板引數的流寫入,否則行為未定義。如果遇到錯誤輸入,則呼叫 is.setstate(std::ios::failbit),這可能會丟擲 std::ios_base::failure。在這種情況下,d 保持不變 |
[編輯] 注意
分佈物件的引數可以透過使用 d.param(p) 永久更改,或者僅在單次 operator()
呼叫期間透過使用 d(g,p) 更改。
對分佈的 const 成員函式和 os << d 的呼叫不會影響重複呼叫 d(g) 產生的數字序列。
[編輯] 標準庫
以下標準庫元件滿足 RandomNumberDistribution
(C++11) |
產生在給定範圍內均勻分佈的整數值 (類模板) |
(C++11) |
產生在給定範圍內均勻分佈的實數值 (類模板) |
(C++11) |
在伯努利分佈上產生 bool 值 (類) |
(C++11) |
根據 二項分佈 生成整數值 (類模板) |
根據 負二項分佈 生成整數值 (類模板) | |
(C++11) |
根據 幾何分佈 生成整數值 (類模板) |
(C++11) |
在泊松分佈上產生整數值 (類模板) |
(C++11) |
根據 指數分佈 生成實數值 (類模板) |
(C++11) |
根據 伽馬分佈 生成實數值 (類模板) |
(C++11) |
根據 威布林分佈 生成實數值 (類模板) |
(C++11) |
根據 極值分佈 生成實數值 (類模板) |
(C++11) |
根據 標準正態(高斯)分佈 生成實數值 (類模板) |
(C++11) |
根據 對數正態分佈 生成實數值 (類模板) |
(C++11) |
根據 卡方分佈 生成實數值 (類模板) |
(C++11) |
根據 柯西分佈 生成實數值 (類模板) |
(C++11) |
根據 Fisher's F-分佈 生成實數值 (類模板) |
(C++11) |
根據 Student's t-分佈 生成實數值 (類模板) |
(C++11) |
在離散分佈上產生隨機整數 (類模板) |
在常數子區間上生成分佈的實數值 (類模板) | |
在定義子區間上生成分佈的實數值 (類模板) |