您尋求產生在指定間隔 [min, max] 內均勻分佈的隨機數。但是,您目前的方法正在產生圍繞單點聚集的數字。
rand() 函數對於產生均勻分佈通常不可靠。它依賴於可能引入偏差的模運算子。
在C 11 中,考慮使用std::uniform_int_distribution 以獲得更可靠的解決方案:
#include <iostream> #include <random> int main() { const int range_from = min; const int range_to = max; 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 可以隨機重新排序容器的元素。
如果 C 11 不可用,請考慮使用 Boost.Random,它提供類似的功能。
以上是如何用 C 語言產生真正均勻的隨機數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!