Andreas Korthaus: Zufallsystem - Wieso microtime?

Beitrag lesen

Hallo!

ich zitiere mal aus dem Manual:

"Benutzen Sie unbedingt srand(), um vor dem ersten Aufruf von rand() einen neuen Startwert festzulegen, ansonsten erhalten Sie bei jedem Programmlauf dieselbe Sequenz von Werten."

und ich zitiere weiter:

"Anmerkung:  Seit PHP 4.2.0 ist es nicht mehr nötig, den Zufallszahlengenerator zu initialisieren, bevor man ihn benutzt."
Quelle: http://de3.php.net/manual/de/function.rand.php

und noch weiter:

"Die PHP rand() Funktion benutzt den in der jeweiligen libc enthaltenen Zufallsgenerator. Gerade in älteren libc-Versionen ist dieser aber oft langsam und die Qualität der erzeugten Pseudozufalls-Sequenzen ist unbefriedigend bis unbekannt.

Die Funktion mt_rand() bietet einen Drop-In Ersatz für die von der libc bereitgestellten Funktionen. Sie benutzt einen Zufallsgenerator mit bekannter Characteristik, den sogenannten "Mersenne Twister", der Pseudozufalls-Sequenzen generiert, die auch kryptografischen Ansprüchen genügen sollten und viermal so schnell arbeitet wie der typische libc-Algorithmus. "
Quelle: http://de3.php.net/manual/de/function.mt-rand.php

Ich weiß nicht, wie PHP das macht, aber bei Pascal hat die Random-Funktion einfach nur nach einem speziellen Alogithmus den Speicher durchgelesen und Werte gegeneinander verrechnet. Wenn dann zwischendurch keine Speichernutzung (in dem Bereich) stattgefunden hatte, bekam man tatsächlich dutzende Male nacheinander den selben Wert.

siehe Zitat/Link.
Das schlimme an der bisherigen Variante(sollte PHP < 4.2 eingesetzt worden sein), dann wiederholt sich die Sequenz der Zufallszahlen bei jedem Scriptaufruf, das heißt dass nur der erste Eintrag sofort gemacht wird, beim nächsten wird wieder die 1. Zahl probiert, die es dann aber gibt, und dann funktioniert die 2. Bei der 3. Zahl werden wieder die ersten beiden probiert, erst beim 3. Versuch wirds klappen. Und dasselbe beim 100., 1000., ... wie man sieht, extrem ineffizient.

Naja, mit neueren PHP-Versionen(>= 4.2) ist das wohl automatisiert worden - warum auch nicht, vermutlich haben es eh (fast ;-)) alle so gemacht wie im Manual-Beispiel.

Grüße
Andreas