首頁 > 後端開發 > C++ > 如何產生指定範圍內真正均勻分佈的隨機整數?

如何產生指定範圍內真正均勻分佈的隨機整數?

Barbara Streisand
發布: 2024-12-20 15:43:17
原創
255 人瀏覽過

How Can We Generate Truly Uniformly Distributed Random Integers in a Specified Range?

產生均勻分佈的隨機整數

在許多程式應用中,產生指定範圍內的隨機整數是一個常見的需求。然而,確保這些整數均勻分佈是一個挑戰。本文探討了實現均勻分佈的各種方法。

現有程式碼和限制

使用者提供的程式碼利用 rand() 函數在給定範圍。然而,該方法缺乏均勻性,特別是對於像這樣的小範圍。這是由於 rand() 傳回最大值 RAND_MAX 的機率較低。

建議公式

為了解決這個問題,使用者設計了一個新公式:

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

雖然這個公式旨在提高均勻性,但抽樣證明它仍然存在不足data.

C標準函式庫解決方案

C 標準函式庫為這個問題提供了一個優雅且可靠的解決方案。 std::random 標頭包含一組隨機數產生器和分佈,可以產生均勻分佈的隨機數。

#include <random>

// Initialize random-number engine with a seed
std::random_device rd;
std::mt19937 rng(rd());

// Define uniform integer distribution
std::uniform_int_distribution<int> uni(min, max);

// Generate random integer within range
auto random_integer = uni(rng);
登入後複製

這種方法利用經過充分測試和最佳化的程式碼,確保均勻分佈和效率。它消除了重新發明輪子的需要以及對偏差或種子值的擔憂。

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

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