在指定區間[min, max] 內產生隨機數] 統一地,應遵循以下準則考量:
使用 rand() 和模運算符,如圖所示在給定的程式碼片段中,可能不會產生均勻分佈的隨機數。它取決於 RAND_MAX 的範圍和值。
使用 C 11,您可以利用 std::uniform_int_distribution 在 a內產生隨機數range:
#include <iostream> #include <random> int main() { const int range_from = 0; const int range_to = 1000; std::random_device rand_dev; std::mt19937 generator(rand_dev()); std::uniform_int_distribution<int> distr(range_from, range_to); std::cout << distr(generator) << '\n'; }
C 11提供了具有各種分佈的附加隨機數產生器,例如如伯努利、泊松和
要隨機洗牌容器,請使用std::shuffle:
#include <iostream> #include <random> #include <vector> int main() { 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); std::for_each(vec.begin(), vec.end(), [](auto i){std::cout << i << '\n';}); }
如果C 11 不可用,您可以使用Boost.Random,提供類似 C 11 隨機數產生的介面設施。
以上是如何在 C 中產生特定範圍內真正均勻的隨機數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!