您尋求一種在指定範圍 [min, max] 內均勻產生隨機數的方法。
rand 的缺陷
您目前使用 rand() 和模運算子可能無法確保均勻分佈,因為它的行為取決於 RAND_MAX 和範圍本身。
C 11 和統一範圍產生
在 C 11 中,std:: Uniform_int_distribution提供了專門針對此問題的解決方案需求:
#include <random> std::uniform_int_distribution<int> distr(min, max); std::random_device rand_dev; std::mt19937 generator(rand_dev()); int random_number = distr(generator);
的附加功能
header 提供了大量具有不同分佈的隨機數產生器,例如伯努利分佈、泊松分佈和常態分佈。
容器洗牌
洗牌容器,請使用std::shuffle:
#include <random> #include <vector> std::vector<int> vec = {4, 8, 15, 16, 23, 42}; std::random_device random_dev; std::mt19937 generator(random_dev()); std::shuffle(vec.begin(), vec.end(), generator);
Boost.Random
如果使用C 11 編譯器不可行,請考慮Boost.Random,它具有與C 11 對應物。
以上是如何在 C 中產生特定範圍內的均勻分佈隨機數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!