Für den Zweck einer Programmierklasse versuche ich, die Schwächen der Zufallszahlengeneratoren zu veranschaulichen, die normalerweise mit der Standard-C-Bibliothek kommen, speziell dem "schlechten Zufallsgenerator" rand()
, der mit OSX kommt (siehe die Manpage).Wie kann ich OSX's rand() den spektralen Test nicht bestehen?
Ich schrieb ein einfaches Programm, mein Verständnis der spektralen Test Test:
#include <stdio.h>
#include <stdlib.h>
int main() {
int i;
int prev = rand();
int new;
for (i=0; i<100000; i++) {
new = rand();
printf("%d %d\n", prev, new);
prev = new;
}
return 0;
}
Aber wenn ich die resultierende Scatterplot plotten, hier ist das, was ich bekommen:
würde ich habe etwas erwartet, das mehr Struktur zeigt, wie man findet on Wikipedia. Mache ich hier etwas falsch? Soll ich in mehr Dimensionen plotten?
UPDATE
pjs Vorschlag folgend ich auf dem Teil des Grundstücks vergrößert, wo die Zahlen kleiner als 1E7 sind, und hier ist das, was ich gefunden habe:
ich genau das finden, die gleichen Linien zeigten sich durch pjs. Sie scheinen vertikal zu sein, aber dies ist unmöglich, da dies bedeuten würde, dass einige Werte von rand()
"übersehen" wurden. Wenn ich die Daten sort -n
ist dies (eine Probe), was ich sehe:
571 9596797
572 9613604
575 9664025
578 9714446
580 9748060
581 9764867
584 9815288
586 9848902
587 9865709
590 9916130
592 9949744
127774 13971
127775 30778
127780 114813
127781 131620
127782 148427
127783 165234
127785 198848
127787 232462
127788 249269
Mit anderen Worten liegen die Punkte in Linien, die fast, aber nicht ganz, vertikal.
Wenn jeder Eingang zufällig ist, dann würde ich erwarten, Rauschen zu sehen, wie das, was Sie erhalten haben. Wenn Sie eine strukturierte Ausgabe wünschen, wie in der verknüpften Seite angezeigt, sind zufällige Daten wahrscheinlich _nicht_, was Sie wollen. – SevenBits
Ja, aber der Punkt ist, dass dies ein Versuch ist zu demonstrieren, dass die Zufallsdaten nicht ganz zufällig sind. Das auf der Verknüpfungsseite angezeigte Bild soll eine Auftragung von hunderttausend Zufallszahlen sein. (Ich bin aber neugierig. Ist "Jeder Punkt stellt 3 aufeinanderfolgende Pseudozufallswerte" bedeutet, dass jeweils drei Zahlen als x, y, z Koordinaten eines Punktes verwendet werden? –
Ich denke, Sie sollten versuchen, 3D. –