產生均勻分佈的隨機整數
在許多程式應用中,產生指定範圍內的隨機整數是一個常見的需求。然而,確保這些整數均勻分佈是一個挑戰。本文探討了實現均勻分佈的各種方法。
現有程式碼和限制
使用者提供的程式碼利用 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中文網其他相關文章!