首頁 >後端開發 >C++ >如何用 C 語言產生真正均勻的隨機數?

如何用 C 語言產生真正均勻的隨機數?

Susan Sarandon
Susan Sarandon原創
2024-12-22 19:42:11699瀏覽

How Can I Generate Truly Uniform Random Numbers in C  ?

在整個範圍內均勻產生隨機數

您尋求產生在指定間隔 [min, max] 內均勻分佈的隨機數。但是,您目前的方法正在產生圍繞單點聚集的數字。

避免 rand()

rand() 函數對於產生均勻分佈通常不可靠。它依賴於可能引入偏差的模運算子。

C 11 均勻分佈

在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 可以隨機重新排序容器的元素。

Boost.Random Alternative

如果 C 11 不可用,請考慮使用 Boost.Random,它提供類似的功能。

以上是如何用 C 語言產生真正均勻的隨機數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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