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>>)以便重現或儲存。