C++ 命名需求: RandomNumberEngine (自 C++11 起)
來自 cppreference.com
隨機數引擎是一個函式物件,它返回無符號整數值,理想情況下,結果範圍內每個值的機率都相等。
任何隨機數引擎也是一個 UniformRandomBitGenerator,因此可以將其插入任何 隨機數分佈 中以獲取隨機數(形式上,隨機變數)。
[編輯] 要求
一個型別滿足 RandomNumberEngine,如果它滿足 UniformRandomBitGenerator 並且,給定以下型別和值,下表中的語義和複雜度要求得到滿足:
型別 | 定義 |
E
|
一個 RandomNumberEngine 型別 |
T
|
E::result_type
|
值 | 定義 |
e | 型別 E 的一個值 |
v | 型別 E 的一個左值 |
x, y | 型別 E 的值(可能帶有 const 限定符) |
s | 型別 T 的一個值 |
q | 一個 SeedSequence 左值 |
z | 型別 unsigned long long 的一個值 |
os | 型別為 std::basic_ostream 特化形式的左值 |
is | 型別為 std::basic_istream 特化形式的左值 |
n | E 狀態的 大小 |
TA | E 的 轉換演算法 |
GA | E 的 生成演算法 |
表示式 | 返回型別 | 語義 | 複雜度 |
---|---|---|---|
E() | 不適用 | 建立一個引擎,其初始狀態與所有其他型別為 E 的預設構造引擎相同。 |
O(n) |
E(x) | 建立一個與 x 比較相等的引擎。 | O(n) | |
E(s) | 建立一個引擎,其初始狀態由 s 確定。 | O(n) | |
E(q) | 建立一個引擎,其初始狀態由一次 q.generate 呼叫確定。 |
與在長度為 n 的序列上呼叫 q.generate 的複雜度相同 | |
e.seed() | void | 後置條件:e == E()。 | 與 E() 相同 |
e.seed(s) | void | 後置條件:e == E(s)。 | 與 E(s) 相同 |
e.seed(q) | void | 後置條件:e == E(q)。 | 與 E(q) 相同 |
e() | T
|
將 e 的狀態從 ei 前進到 ei+1 (即 TA(ei )),並返回 GA(ei )。 |
均攤常量時間 |
e.discard(z) | void | 透過任何等同於連續呼叫 z 次 e() 的方式,將 e 的狀態從 ei 前進到 ei+z 。 |
不比連續呼叫 z 次 e() 的複雜度更差 |
x == y | bool | 對於所有正整數 i,如果連續 i 次呼叫 x() 和 y() 返回相同的值,則返回 true。否則返回 false。 | O(n) |
x != y | bool | !(x == y) | O(n) |
os << x | decltype(os)& | 將 fmtflags 設定為 std::ios_base::dec | std::ios_base::left,填充字元設定為空格字元,將 x 當前狀態的文字表示寫入 os。 後置條件:os 的 fmtflags 和填充字元與之前相同。 |
O(n) |
is >> v | decltype(is)& | 將 fmtflags 設定為 std::ios_base::dec,從 is 讀取 v 當前狀態的文字表示。如果遇到錯誤輸入,確保 v 的狀態未因操作而改變,並呼叫 is.setstate(std::ios_base::failbit)(這可能會丟擲 std::ios_base::failure)。 前置條件:is 提供了一個文字表示,該表示之前使用滿足以下所有條件的輸出流 pr 寫入:
後置條件:is 的 fmtflags 與之前相同。 |
O(n) |
[編輯] 標準庫
以下標準庫設施滿足 RandomNumberEngine
(C++11) |
實現 線性同餘 演算法 (類模板) |
(C++11) |
實現 Mersenne twister 演算法 (類模板) |
(C++11) |
實現帶借位減法 (滯後斐波那契) 演算法 (類模板) |
(C++26) |
基於計數器的可並行化生成器 (類模板) |
(C++11) |
丟棄隨機數引擎的一些輸出 (類模板) |
(C++11) |
將隨機數引擎的輸出打包成指定位元數的塊 (類模板) |
(C++11) |
以不同順序提供隨機數引擎的輸出 (類模板) |
以下標準庫設施滿足 UniformRandomBitGenerator 但不滿足 RandomNumberEngine
(C++11) |
使用硬體熵源的非確定性隨機數生成器 (類) |