Nehmen wir an, ein Pseudo-Zufallszahlengenerator kann ganze Zahlen zwischen 0 und einer Obergrenze größer als 200 liefern. Nun werden Paare (X, Y) von Pseudo-Zufallszahlen erzeugen. Immer dann, wenn die beiden aufeinanderfolgende Pseudozufallszahlen beide kleiner als 200 sind, wird der Punkt (X, Y) auf einer Fläche der Dimension 200x200 markiert.
Bei einem naiven linearen Verfahren zur Erzeugung von Zufallszahlen lassen sich die Hyperebenen, auf denen die aufeinanderfolgenden Pseudozufallszahlen liegen, so mit blossem Auge erkennen.
Der Test ist dann sinnvoll, wenn nicht dokumentiert ist, auf welche Weise die Pseudozufallszahlen erzeugt werden. Wenn schon in der Dokumentation steht, dass es ein additiver nichtlinearer Pseudozufallszahlengenerator ist, dann lohnt es sich nur für sehr misstrauische Anwender, auf diese Weise die Unkorreliertheit aufeinanderfolgender Pseudozufallszahlen zu prüfen.
Ein Bash-Skript zum Erzeugen von Testdaten könnte so aussehen
|
Dieses Skript läuft recht lange und erzeugte mit der 2.05.0(1)-release-Version der bash unter SuSE Linux 7.3 das folgende Ergebnis:
Auf diese Weise erzeugte Pseudozufallszahlen können ohne grosse Bedenken zur Simulation unabhängiger Ziehungen aus einer höherdimensionalen Gleichverteilung verwendet werden.
|
läuft zwar deutlich kürzer, würde aber einen naiven Pseudozufallszahlengenerator nicht erkennen helfen, weil die möglicherweise vorhandenen Hyperebenen durch die Divison der Pseudozufallszahlen mit 60 so nahe zusammengeschoben würden, dass sie mit dem Auge nicht mehr zu erkennen wären.
Das Skript erzeugt mit der bash-Version 2.05a mit der glibc 2.2.5:
Dem Ersteller dieser Graphik fiel dabei besonders der Punkt an (0,0) und die freie Fläche bis (20,20) auf. Beides ist aber kein Hinweis auf das mit diesem Test nachzuweisende Problem mit einem Pseudozufallszahlengenerator und ließ sich in einem zweiten Durchlauf des Scripts auch nicht reproduzieren.
|
|
So nicht |
Als Negativbeispiel hier ein linearer Kongruenzgenerator (der üblen Sorte):
|
Achtung, hier kann volatile notwendig sein, weil sonst ...
|
Die Abhängigkeit aufeinanderfolgender Ergebnisse ist unübersehbar. Der Generator hat auch eine zu kleine Periode sowie eine unvollständige und ungleichmäßige Verteilung.