From:             dcowgill at mail dot communityconnect dot com
Operating system: Linux
PHP version:      4.3.3RC3
PHP Bug Type:     Performance problem
Bug description:  rand & mt_rand seed RNG every call

Description:
------------
>From the docs for rand: "In older versions of PHP, you 
had to seed the random number generator before use with 
srand(). Since 4.2.0 this is no longer necessary."

The implication is that rand seeds the RNG the first 
time it is called, unless srand has been previously 
called; however, rand seeds the RNG every time (or 
until srand is explicitly called). This results in a 
significant increase in running time (about an order of 
magnitude).

The above also applies to mt_rand, except that the 
performance penalty is greater (apparently because its 
seed-generation algorithm is more expensive).

(the patch to ext/standard/rand.c to correct the 
problem is trivial)

Reproduce code:
---------------
// t1.php
<?
for ($i=0; $i<100000; $i++) rand(0,10);
?>

// t2.php
<?
srand();
for ($i=0; $i<100000; $i++) rand(0,10);
?>

Actual result:
--------------
$ time php t1.php

real    0m0.729s
user    0m0.650s
sys     0m0.080s

$ time php t2.php

real    0m0.101s
user    0m0.100s
sys     0m0.000s

-- 
Edit bug report at http://bugs.php.net/?id=25007&edit=1
-- 
Try a CVS snapshot (php4):  http://bugs.php.net/fix.php?id=25007&r=trysnapshot4
Try a CVS snapshot (php5):  http://bugs.php.net/fix.php?id=25007&r=trysnapshot5
Fixed in CVS:               http://bugs.php.net/fix.php?id=25007&r=fixedcvs
Fixed in release:           http://bugs.php.net/fix.php?id=25007&r=alreadyfixed
Need backtrace:             http://bugs.php.net/fix.php?id=25007&r=needtrace
Try newer version:          http://bugs.php.net/fix.php?id=25007&r=oldversion
Not developer issue:        http://bugs.php.net/fix.php?id=25007&r=support
Expected behavior:          http://bugs.php.net/fix.php?id=25007&r=notwrong
Not enough info:            http://bugs.php.net/fix.php?id=25007&r=notenoughinfo
Submitted twice:            http://bugs.php.net/fix.php?id=25007&r=submittedtwice
register_globals:           http://bugs.php.net/fix.php?id=25007&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=25007&r=php3
Daylight Savings:           http://bugs.php.net/fix.php?id=25007&r=dst
IIS Stability:              http://bugs.php.net/fix.php?id=25007&r=isapi
Install GNU Sed:            http://bugs.php.net/fix.php?id=25007&r=gnused

Reply via email to