首頁 >後端開發 >C++ >如何在 C 中產生特定範圍內的均勻分佈隨機數?

如何在 C 中產生特定範圍內的均勻分佈隨機數?

Patricia Arquette
Patricia Arquette原創
2024-12-24 11:06:18176瀏覽

How Can I Generate Uniformly Distributed Random Numbers Within a Specific Range in C  ?

跨範圍均勻產生隨機數

您尋求一種在指定範圍 [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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn