首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 隨機數生成器(random-number generator)完整指南

     編輯:關於C++

核心組成

C++11 隨機數庫採用「引擎 + 分布」分離設計:

  • 引擎:產生均勻分布的隨機位元序列(如 std::mt19937、std::default_random_engine)。
  • 分布:將引擎輸出轉換為特定統計分布(如 uniform_int_distribution、normal_distribution)。

常用引擎

  • std::mt19937:梅森旋轉演算法,速度快、週期長(2^19937-1),推薦通用首選。
  • std::default_random_engine:實作定義(通常為 mt19937 或 minstd_rand)。
  • std::random_device:非確定性隨機來源(硬體熵),用於種子。

常用分布

  • uniform_int_distribution<T>:整數均勻分布(預設 int)。
  • uniform_real_distribution<T>:浮點數均勻分布(預設 double)。
  • normal_distribution<T>:常態分布(需指定平均值與標準差)。
  • bernoulli_distribution:伯努利分布(布林值)。
  • poisson_distribution、exponential_distribution 等。

正確使用模式

// 函式內部 static 保持狀態,避免重複種子
int random_int(int min, int max) {
    static std::mt19937 eng(std::random_device{}());
    static std::uniform_int_distribution<int> dist;
    dist.param(std::uniform_int_distribution<int>::param_type(min, max));
    return dist(eng);
}

關鍵提醒

  • 引擎與分布物件不可在每次呼叫時重新建立(會產生相同序列)。
  • 執行緒安全:每條執行緒持有獨立引擎實例,或使用 thread_local。
  • 可序列化引擎狀態(operator<</operator>>)以便重現或儲存。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved