為什麼新的隨機庫比 rand() 更好?
當代關於 rand() 的擔憂引發了關於利用高級隨機數的討論基於引擎分佈範式的生成(RNG)過程,而不是傳統的 std::rand() 和模方法。為了第一手了解 rand() 的缺點,進行了快速實驗。
利用 std::rand() 和 std 建立了兩個函數 getRandNum_Old() 和 getRandNum_New(): :mt19937 和 std::uniform_int_distribution 分別產生 0 到 5 之間的隨機數。使用每種方法產生 960,000 個隨機數,並記錄每個數字(0-5)的頻率。標準差作為衡量標準,數值越低表示分佈越均勻。該過程重複了 1000 次,並測量了每次迭代所需的時間。
令人驚訝的是,兩種方法中的捲數分佈相似。新方法大約慢了 4 倍。速度的提升似乎是以品質的最小提高為代價的。
然而,一個關鍵的區別在於 RNG 實作本身。許多 rand() 實作都採用線性同餘產生器 (LCG),但它們通常不是最強大的。儘管它們很流行,但它們通常在進行的基本測試中產生可接受的結果。
低於標準的 rand() 實現的缺點包括低位隨機性低、週期短、RAND_MAX 低以及連續序列之間的相關性萃取物。然而,值得注意的是,這些限制並不是 rand() API 固有的。
rand() 的根本問題集中在:
新的函式庫透過提供以下功能解決了這些問題:
效能方面,std::mt19937(在測試中由 std::rand() 使用)比 std::minstd_rand 慢(
以上是為什麼 C 中的 `` 庫比 `rand()` 更受歡迎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!