Home >Backend Development >PHP Tutorial >PHP random function mt_rand() and rand() performance comparison_PHP tutorial
In PHP, the mt_rand() and rand() functions can randomly generate a pure number. They both require me to set the seed data and then generate it. So which one of mt_rand() and rand() has better performance? Below I will When in doubt, test it out.
Example 1. mt_rand() example
The code is as follows | Copy code | ||||
echo mt_rand() . "n"; echo mt_rand(5, 15); ?>The output of the above example is similar to: 1604716014
1478613278 |
Note: As of PHP 4.2.0, it is no longer necessary to seed the random number generator with the srand() or mt_srand() function, it is now done automatically.
See mt_srand(), mt_getrandmax() and rand().
The rand() function returns a random integer.
Grammar
rand(min,max) parameter description
min,max are optional. Specifies the range of random number generation.
Description
If the optional parameters min and max are not provided, rand() returns a pseudo-random integer between 0 and RAND_MAX. For example, if you want a random number between 5 and 15 (inclusive), use rand(5, 15).
Tips and NotesNote: On some platforms (e.g. Windows) RAND_MAX is only 32768. If you need a range greater than 32768, specify the min and max parameters to generate a number greater than RAND_MAX, or consider using mt_rand() instead.
Note: As of PHP 4.2.0, seeding the random number generator with the srand() or mt_srand() functions is no longer necessary, it is now done automatically.
代码如下 | 复制代码 |
$max = 100000; $timeparts = explode(' ',microtime()); |
The code is as follows | Copy code |
$max = 100000; $timeparts = explode(' ',microtime()); $stime = $timeparts[1].substr($timeparts[0],1); $i = 0; while($i < $max) {<🎜> rand();<🎜> $i++;<🎜> }<🎜> $timeparts = explode(' ',microtime());<🎜> $etime = $timeparts[1].substr($timeparts[0],1);<🎜> $time = $etime-$stime;<🎜> echo "{$max} random numbers generated in {$time} seconds using rand();<🎜> ";<🎜> <🎜>$timeparts = explode(' ',microtime());<🎜> $stime = $timeparts[1].substr($timeparts[0],1);<🎜> $i = 0;<🎜> while($i < $max) {<🎜> mt_rand();<🎜> $i++;<🎜> }<🎜> $timeparts = explode(' ',microtime());<🎜> $etime = $timeparts[1].substr($timeparts[0],1);<🎜> $time = $etime-$stime;<🎜> echo "{$max} random numbers generated in {$time} seconds using mt_rand();<🎜> ";<🎜> ?> |
Result:
First test
100000 random numbers generated in 0.024894952774048 seconds using rand();
100000 random numbers generated in 0.028925895690918 seconds using mt_rand();
Second test
100000 random numbers generated in 0.03147292137146 seconds using rand();
100000 random numbers generated in 0.02997088432312 seconds using mt_rand();
The third test
100000 random numbers generated in 0.028102874755859 seconds using rand();
100000 random numbers generated in 0.02803111076355 seconds using mt_rand();
The fourth test
100000 random numbers generated in 0.025573015213013 seconds using rand();
100000 random numbers generated in 0.028030157089233 seconds using mt_rand();
This result is only displayed several times. If you test it a few times, you will find that the two changes alternately. In fact, there is not much difference between the two.
Comparison test 2 between mt_rand() and rand()
My own testing environment
Operating system: windows xp
apache 2.0
php 5.2.12
Memory 2G
The code is as follows | Copy code | ||||
{
$time_start = microtime_float(); mt_rand(); }
$time_end = microtime_float();
?> |
First time
rand() cost 0.25919604301453 secondsrand() cost 0.31136202812195 seconds
So why does the PHP manual say that mt_rand() is 4 times faster than rand()?