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

如何在 C 中產生均勻分佈的隨機整數?

Barbara Streisand
發布: 2024-12-24 20:17:11
原創
860 人瀏覽過

How Can I Generate Uniformly Distributed Random Integers in C  ?

產生均勻分佈的隨機整數

在開發軟體時,產生指定範圍內的隨機整數是一項常見任務。然而,找到一個快速且均勻分佈的隨機數產生器可能具有挑戰性。在本文中,我們透過探索在給定範圍內產生隨機整數的各種方法來解決這個問題。

簡單的方法

產生隨機整數的常見方法是使用 rand()功能。然而,正如原始問題中所表達的, rand() 可能會導致有偏差的分佈,特別是對於小範圍。

為了解決這個問題,提出了一個替代公式:

( (max - min) * rand() + (RAND_MAX / (2 * (max - min))) ) / RAND_MAX
登入後複製

雖然這個公式提供了更均勻的分佈,但它仍然無法滿足所有要求,即速度、均勻分佈、變數範圍和可播種性。

C 標準函式庫救援

介紹 C 標準函式庫函數 std::uniform_int_distribution 及其相關的隨機數產生器 std::mt19937。這種方法簡單、快速,並提供公正的結果。

#include <random>

std::random_device rd;
std::mt19937 rng(rd());
std::uniform_int_distribution<int> uni(min,max);

auto random_integer = uni(rng);
登入後複製

std::random_device 使用真實的熵源初始化生成器,確保產生的數字是不可預測的和隨機的。 std::uniform_int_distribution 定義了要產生的整數範圍,確保該範圍內的所有值都有相同的被選擇機率。

此方法滿足所有要求:

  • 速度:標準函式庫實現非常高效,即使產生大量隨機數也是如此。
  • 均勻分佈: std::uniform_int_distribution 函數確保產生的數字無偏且均勻分佈。
  • 變數範圍:可以透過設定最小和最大參數將分佈自訂為任何整數範圍。
  • 可播種性: rd 參數提供了一種用特定值為生成器提供種子的方法,允許

卓越的解決方案

總之,在C 中產生均勻分佈隨機整數的最簡單、最好的方法是使用std::uniform_int_distribution 和std::mt19937 函數。這種方法利用了標準函式庫的最佳化演算法,保證了速度和隨機性。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板