rand & mt_rand seed RNG every call
| Bug #25007 | rand & mt_rand seed RNG every call | ||||
|---|---|---|---|---|---|
| Submitted: | 2003-08-10 18:20 UTC | Modified: | 2003-08-10 19:43 UTC | ||
| From: | dcowgill at mail dot communityconnect dot com | Assigned: | iliaa (profile) | ||
| Status: | Closed | Package: | Performance problem | ||
| PHP Version: | 4.3.3RC3 | OS: | Linux | ||
| Private report: | No | CVE-ID: | None | ||
[2003-08-10 18:20 UTC] dcowgill at mail dot communityconnect dot com
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
Patches
Pull Requests
History
AllCommentsChangesGit/SVN commits
[2003-08-10 19:43 UTC] sniper@php.net