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

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

Barbara Streisand
Barbara Streisand原創
2024-12-25 15:58:10160瀏覽

How can I generate truly uniform random numbers within a specific range in C  ?

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

在指定區間[min, max] 內產生隨機數] 統一地,應遵循以下準則考量:

避免使用rand()和模運算子

使用 rand() 和模運算符,如圖所示在給定的程式碼片段中,可能不會產生均勻分佈的隨機數。它取決於 RAND_MAX 的範圍和值。

C 11 均勻整數分佈

使用 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';});
}

Boost.Random

如果C 11 不可用,您可以使用Boost.Random,提供類似 C 11 隨機數產生的介面設施。

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

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