C 11 中的隨機數產生:簡單分解
C 11 引入了一組強大的隨機數產生功能,為程式設計師提供了用於產生具有各種分佈的隨機數的綜合工具集。理解這些功能可能會令人畏懼,但我們會將它們分解為簡單的概念以闡明它們的用途。
什麼是引擎和發行版?
-
引擎:隨機數產生的核心是引擎的概念。引擎是一個生成器,它產生一系列隨機出現的數字。 C 11 提供了多種引擎,例如 Mersenne Twister,可以保證長時間的偽隨機數。
-
分佈: 分佈將引擎的統一輸出轉換為特定分佈。例如,均勻分佈為指定範圍內的所有元素分配相等的機率,而常態分佈則模擬眾所周知的鐘形曲線。
如何生成隨機數
生成隨機數涉及三個關鍵步驟:
-
設置引擎: 實例化引擎,例如std::mt19937 rng。
-
為引擎設定種子: 使用種子值初始化引擎,例如 rng.seed(seed_val)。
-
建立分佈:定義所需的分佈,例如std::uniform_int_distribution uint_dist.
-
產生隨機數字:利用引擎產生指定分佈範圍內的隨機數,例如uint_dist(rng).
他們做嗎有效嗎?
偽隨機數產生器依靠數學演算法來產生在我們看來是隨機的序列。它們不會產生真正的隨機數,而是產生一長串通過隨機性統計檢定的偽隨機數。
並發
確保執行緒安全對於隨機數至關重要一代。 C 11 的隨機引擎允許執行緒本地實例,確保每個執行緒都在自己獨立的偽隨機數序列上運行。
Misc
-
同樣可能: 正確的分佈確保指定範圍內的所有結果具有相同的機率
- 正確的分佈確保指定範圍內的所有結果具有相同的機率
引擎和分發:- 每個引擎通常會為種子值指定建議的結果類型,例如MyRNG::result_type。
資源:
探索外部資源,例如關於 TR1 隨機的 codeguru 文章和維基百科關於隨機數產生的摘要,以進一步了解見解。
以上是C 11 如何使用引擎和分佈簡化隨機數產生?的詳細內容。更多資訊請關注PHP中文網其他相關文章!