首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 隨機數效能大比拼:mt_rand() vs rand() 真相揭秘

     編輯:PHP 相關知識

兩函式簡介

  • rand($min, $max):傳統隨機數,Windows 下 RAND_MAX 僅 32767;
  • mt_rand($min, $max):採用 Mersenne Twister 演算法,速度較快、週期極長(2^19937-1),mt_getrandmax() 回傳 2147483647。

實測環境

  • OS:Windows XP / Linux
  • PHP:5.2.12
  • CPU:圖拉丁 1.1GHz / P-M 725
  • 測試:100 萬次迴圈呼叫

測試結果(多次執行平均)

測試輪次rand() 耗時(秒)mt_rand() 耗時(秒)勝者
10.2590.286rand()
20.3110.290mt_rand()
30.2750.271mt_rand()
40.2630.277rand()

結論

  • 兩者效能差異可忽略不計,隨機波動下互有勝負;
  • 官方文件稱「mt_rand 快 4 倍」係指 PHP 4.2 以前(2004 年前),當時 rand() 尚未改用較好演算法;
  • 現代 PHP 版本(5.3+)兩者底層實作已趨同,選擇標準:
    • 需 32 位以上隨機數 → mt_rand();
    • 一般用途、程式碼相容性 → rand() 亦可;
    • 加密用途 → 絕不可用兩者,改用 random_int()、openssl_random_pseudo_bytes()。

補充:播種機制

PHP 4.2.0 起 srand()/mt_srand() 自動播種,無需手動呼叫。手動播種反而可能降低隨機品質(如固定種子導致可預測)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved