首頁 >後端開發 >C++ >為什麼 `rand() % 14` 在 Apple 平台上只產生 6 和 13?

為什麼 `rand() % 14` 在 Apple 平台上只產生 6 和 13?

Susan Sarandon
Susan Sarandon原創
2024-11-26 04:53:13681瀏覽

Why Does `rand() % 14` Only Generate 6 and 13 on Apple Platforms?

Rand() % 14 僅產生值6 或13:打破謎團

您面臨的問題是由於固有的正如您提供的答案中所解釋的,Apple 平台上實作rand() 函數的限制。使用預設參數時,rand() 使用的隨機數產生器會產生一個除以 14 時熵有限的序列,導致它僅在兩個值 6 和 13 之間循環。

要修正此問題,您可以採取以下步驟:

  1. 在Srand() 之後多次調用Rand():正如答案中所建議的,在呼叫srand(time(NULL)) 後丟棄rand() 產生的前幾個結果。透過這樣做,您可以消除僅產生 6 和 13 的初始循環。
  2. 使用不同的隨機數產生器:如果上述方法無法解決問題,請考慮切換到其他方法提供更好熵的隨機數產生器,例如 Mersenne Twister。您可以在 C 庫中找到替代隨機數產生器或作為單獨的實作。
  3. 修改隨機數的範圍:正如您在編輯中提到的,將 rand() 的範圍更改為 13或 15 允許其正常工作。這是因為 15(例如 752574)和 13(例如 220379)的乘數不能被它們各自的餘數整除。但是,更改範圍可能不適合您的特定用例,特別是如果您需要 0 到 13 之間的隨機數。

透過解決 Apple 平台上隨機數產生器的根本問題,您可以確保 rand() % 14 產生 0 到 13 之間分佈更均勻的值序列。

以上是為什麼 `rand() % 14` 在 Apple 平台上只產生 6 和 13?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn