在開發軟體時,產生指定範圍內的隨機整數是一項常見任務。然而,找到一個快速且均勻分佈的隨機數產生器可能具有挑戰性。在本文中,我們透過探索在給定範圍內產生隨機整數的各種方法來解決這個問題。
產生隨機整數的常見方法是使用 rand()功能。然而,正如原始問題中所表達的, rand() 可能會導致有偏差的分佈,特別是對於小範圍。
為了解決這個問題,提出了一個替代公式:
( (max - min) * rand() + (RAND_MAX / (2 * (max - min))) ) / RAND_MAX
雖然這個公式提供了更均勻的分佈,但它仍然無法滿足所有要求,即速度、均勻分佈、變數範圍和可播種性。
介紹 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 定義了要產生的整數範圍,確保該範圍內的所有值都有相同的被選擇機率。
此方法滿足所有要求:
總之,在C 中產生均勻分佈隨機整數的最簡單、最好的方法是使用std::uniform_int_distribution 和std::mt19937 函數。這種方法利用了標準函式庫的最佳化演算法,保證了速度和隨機性。
以上是如何在 C 中產生均勻分佈的隨機整數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!