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

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

Linda Hamilton
發布: 2025-01-03 14:21:42
原創
402 人瀏覽過

How Can I Efficiently Generate Uniformly Distributed Random Integers in C  ?

高效產生均勻分佈的隨機整數

在程式設計領域,產生隨機數在各種應用中起著至關重要的作用。在這些任務中,創建均勻分佈的隨機整數是一個常見的要求。讓我們探索現有方法的局限性,並提出一個最佳化的解決方案,以滿足速度、均勻性、可變範圍和可播種性的特定要求。

樸素方法的局限性

使用 rand() 函數的簡單方法由於排除了最大邊界值而無法提供真正的均勻性。為了解決這個問題,提出了第二個公式,但實驗顯示分佈不均勻。

最佳解決方案:利用C 標準庫

幸運的是,C 標準庫提供了產生無偏隨機數的綜合解:標頭。此標頭提供了高級隨機數引擎,例如 Mersenne-Twister 和確保一致、統一結果的分佈類。

以下C 程式碼片段示範了實作:

#include <random>

std::random_device rd;     // Random device for seed initialization
std::mt19937 rng(rd());    // Random-number engine using Mersenne-Twister
std::uniform_int_distribution<int> uni(min,max); // Distribution class for uniform integers

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

此方法有顯著的優點:

  • 速度: C 標準庫專為效能而設計,提供最佳化的解決方案。
  • 一致性: std::uniform_int_distribution 類別保證指定範圍內的無偏結果。
  • 可變範圍: 此解決方案支援任意範圍最小值和最大值
  • 可播種性: std::random_device 允許隨機引擎的播種以實現可重複性。

透過利用 C 標準函式庫,您可以毫不費力地高效可靠地產生均勻分佈的隨機整數,無需複雜的公式或重新發明輪子。

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

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