rand() versus mt_rand()
Waarom wordt mt_rand() aangeraden? Uit eigen testen blijkt deze helemaal niet nauwkeuriger te zijn, en ook niet sneller.
Heeft iemand meer informatie?
TESTRESULTATEN RAND(0,1000) EN MT_RAND(0,1000)
rand1
rand2
rand3
mtrand1
mtrand2
mtrand3
FORLOOP VAN 1 TOT 100,000,000
forloop rand( "int(12)" ) - 136 sec
forloop mt_rand( "int(12)" ) - 137 sec
Heeft iemand meer informatie?
TESTRESULTATEN RAND(0,1000) EN MT_RAND(0,1000)
rand1
Code (php)
1
2
3
4
5
6
2
3
4
5
6
COUNT(getal) = 1000000
SUM(getal) = 499990516
AVG(getal) = 499.9905
Verschil totaal = 0.0095
Verschil procentueel = 0.0019%
SUM(getal) = 499990516
AVG(getal) = 499.9905
Verschil totaal = 0.0095
Verschil procentueel = 0.0019%
rand2
Code (php)
1
2
3
4
5
6
2
3
4
5
6
COUNT(getal) = 1000000
SUM(getal) = 499965465
AVG(getal) = 499.9655
Verschil totaal = 0.0345
Verschil procentueel = 0.0069%
SUM(getal) = 499965465
AVG(getal) = 499.9655
Verschil totaal = 0.0345
Verschil procentueel = 0.0069%
rand3
Code (php)
1
2
3
4
5
6
2
3
4
5
6
COUNT(getal) = 1000000
SUM(getal) = 499953378
AVG(getal) = 499.9534
Verschil totaal = 0.0466
Verschil procentueel = 0.00932%
SUM(getal) = 499953378
AVG(getal) = 499.9534
Verschil totaal = 0.0466
Verschil procentueel = 0.00932%
mtrand1
Code (php)
1
2
3
4
5
6
2
3
4
5
6
COUNT(getal) = 1000000
SUM(getal) = 499945223
AVG(getal) = 499.9452
Verschil totaal = 0.0548
Verschil procentueel = 0.01096%
SUM(getal) = 499945223
AVG(getal) = 499.9452
Verschil totaal = 0.0548
Verschil procentueel = 0.01096%
mtrand2
Code (php)
1
2
3
4
5
6
2
3
4
5
6
COUNT(getal) = 1000000
SUM(getal) = 499684557
AVG(getal) = 499.6846
Verschil totaal = 0.3154
Verschil procentueel = 0.06308%
SUM(getal) = 499684557
AVG(getal) = 499.6846
Verschil totaal = 0.3154
Verschil procentueel = 0.06308%
mtrand3
Code (php)
1
2
3
4
5
6
2
3
4
5
6
COUNT(getal) = 1000000
SUM(getal) = 499999440
AVG(getal) = 499.9994
Verschil totaal = 0.00060000000002
Verschil procentueel = 0.000120000000004%
SUM(getal) = 499999440
AVG(getal) = 499.9994
Verschil totaal = 0.00060000000002
Verschil procentueel = 0.000120000000004%
FORLOOP VAN 1 TOT 100,000,000
forloop rand( "int(12)" ) - 136 sec
forloop mt_rand( "int(12)" ) - 137 sec
Gewijzigd op 28/03/2006 22:55:00 door PHP erik
Gesponsorde koppelingen:
PHPerik:
Waarom wordt mt_rand() aangeraden? Uit eigen testen blijkt deze helemaal niet nauwkeuriger te zijn, en ook niet sneller.
Is dat niet juist goed voor de onvoorspelbaarheid? Als je het zo ziet zijn de functies eigenlijk voorspelbaar, zie de uitkomst van array_sum().
Gewijzigd op 28/03/2006 22:58:00 door Jelmer rrrr
Hebben we het weer over de grote 0?
Ik zeg niet dat het erg is. Maar je moet bedenken dat hoe dichter het bij het theoretische ligt, hoe onvoorspelbaarder ze zijn.
Ik snap alleen niet waarom php.net beweerd dat je mt_rand() beter kunt gebruiken. Dat is echt uit de duim gezogen.
Ik snap alleen niet waarom php.net beweerd dat je mt_rand() beter kunt gebruiken. Dat is echt uit de duim gezogen.



