首頁 > 後端開發 > C++ > 為什麼 `rand() % 14` 產生不一致的結果?

為什麼 `rand() % 14` 產生不一致的結果?

Patricia Arquette
發布: 2024-12-03 05:46:09
原創
962 人瀏覽過

Why Does `rand() % 14` Produce Non-Uniform Results?

Rand() % 14 產生非均勻值

在嘗試產生特定範圍內的隨機值時,某些程式設計師可能會遇到使用rand() 函數時出現異常行為。報告的一個常見問題是 rand() % 14 始終傳回 6 或 13 的值。

要理解這一現象,深入研究 rand() 的底層演算法至關重要。蘋果機器上使用的具體實作是基於乘法與進位(MWC)產生器。不幸的是,這個生成器的一個弱點是它能被 7 整除,特別是乘數值 16807。

因此,初始化 srand() 後立即產生的前幾個隨機數的低位位有限熵。在 rand() % 14 的情況下,低位元將始終具有相同的值,僅導致兩種可能的結果:6 或 13。

為了緩解此問題,一個簡單的解決方案是丟棄初始化後產生的前幾個隨機數。透過多次呼叫 rand() 而不使用結果,演算法的內部狀態變得更加混亂,並且恢復了值的均勻分佈。

以上是為什麼 `rand() % 14` 產生不一致的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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