PHP では、mt_rand() 関数と rand() 関数はどちらもシード データを設定して生成する必要があります。では、どちらの方がパフォーマンスが良いでしょうか。疑問がある場合は、テストしてください。
例 1. mt_rand() の例
コードは次のとおりです | コードをコピー |
echo mt_rand() "n"; echo mt_rand(5, 15); 上記の例の出力は次のようになります: 1604716014 |
注: PHP 4.2.0 では、srand() または mt_srand() 関数を使用して乱数ジェネレーターをシードする必要はなくなり、自動的に行われるようになりました。
注: 3.0.7 より前のバージョンでは、最大は範囲を意味します。これらのバージョンで上記の例と同じ 5 から 15 までの乱数を取得するには、短い例は mt_rand (5, 11) です。
mt_srand()、mt_getrandmax()、および rand() を参照してください。
rand() 関数はランダムな整数を返します。
文法
rand(min,max)パラメータの説明
min、max はオプションです。乱数を生成する範囲を指定します。
手順
オプションのパラメーター min と max が指定されていない場合、 rand() は 0 から RAND_MAX までの擬似乱数の整数を返します。たとえば、5 から 15 までの範囲の乱数が必要な場合は、rand(5, 15) を使用します。
ヒントと注意事項
注: 一部のプラットフォーム (Windows など) では、RAND_MAX は 32768 のみです。 32768 より大きい範囲が必要な場合は、min パラメーターと max パラメーターを指定して RAND_MAX より大きい数値を生成するか、代わりに mt_rand() の使用を検討してください。
注: PHP 4.2.0 では、srand() 関数または mt_srand() 関数を使用して乱数ジェネレーターをシードする必要はなくなり、自動的に行われるようになりました。
注: 3.0.7 より前のバージョンでは、最大は範囲を意味します。これらのバージョンで上記の例と同じ 5 から 15 までの乱数を取得するには、短い例は rand (5, 11) です。
mt_rand() は本当に rand() より 4 倍速いのでしょうか?
この質問を念頭に置いて、オンラインで紹介文を読みながら自分でテストしました。テストは次のとおりです。
mt_rand() と rand() の比較テスト 1
テストコード:
コードは次のとおりです | コードをコピー |
$max = 100000; $timeparts =explode(' ',microtime()); |
結果:
最初のテスト
rand();
を使用して 0.024894952774048 秒で 100000 個の乱数が生成されました
mt_rand();
を使用して、0.028925895690918 秒で 100000 個の乱数が生成されました
二次試験
rand();
を使用して、0.03147292137146 秒で 100000 個の乱数が生成されました
mt_rand();
を使用して、0.02997088432312 秒で 100000 個の乱数が生成されました
3回目のテスト
rand();
を使用して、0.028102874755859 秒で 100000 個の乱数が生成されました
mt_rand();
を使用して、0.02803111076355 秒で 100000 個の乱数が生成されました
4回目のテスト
rand();
を使用して、0.025573015213013 秒で 100000 個の乱数が生成されました
mt_rand();
この結果は数回のみ表示されますが、実際には 2 つが交互に変化することがわかります。
mt_rand() と rand() の比較テスト 2
私自身のテスト環境
オペレーティングシステム: Windows XP
アパッチ2.0
php 5.2.12
メモリ2G
コードは次のとおりです | コードをコピー |
関数 microtime_float()
|
結果:
初めて
rand() コスト 0.25919604301453 秒
mt_rand() コスト 0.28554391860962 秒
2回目
rand() コスト 0.31136202812195 秒
mt_rand() コスト 0.28973197937012 秒
3回目
rand() コスト 0.27545690536499 秒
mt_rand() コスト 0.27108001708984 秒
4回目
rand() コスト 0.26263308525085 秒
mt_rand() コスト 0.27727103233337 秒
結果は同じで、2 つの所要時間は交互に変化します。実際には、2 つの間に大きな違いはありません。
phpのmt_rand()とrand()の比較結論
では、なぜ PHP マニュアルには mt_rand() が rand() より 4 倍高速であると記載されているのでしょうか?
rand() は 2004 年からアルゴリズムを使用しているため、速度に大きな違いはありません