Dla celów klasy programistycznej próbuję zilustrować słabości generatorów liczb losowych, które zwykle pochodzą ze standardowej biblioteki C, w szczególności "zły generator losowy" rand()
, który pochodzi z OSX (quoth the manpage).W jaki sposób mogę sprawić, że OS RandX() nie przejdzie testu spektralnego?
Napisałem prosty program do testowania moje rozumienie widmowej testu:
#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;
}
Ale kiedy wykreślić wynikowy rozrzutu, oto co mam:
bym spodziewałem się czegoś o większej strukturze, na przykład tego, co znajduje się on Wikipedia. Czy robię coś złego tutaj? Czy powinienem kreślić w większej ilości wymiarów?
UPDATE
Po sugestii PJS koszulka I zbliżeniu na części działki, gdzie liczby są mniejsze niż 1E7, i oto co znalazłem:
znajdę dokładnie te same linie pokazane przez pjs. Wydają się być pionowe, ale jest to niemożliwe, ponieważ oznaczałoby to, że niektóre wartości zostały "pominięte" przez rand()
. Kiedy sort -n
dane jest (próbka), co widzę:
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
Innymi słowy, punkty leżą na liniach, które są prawie, ale nie całkiem pionowe.
Jeśli każde wejście jest losowa, to bym się spodziewać hałasu jak co otrzymał. Jeśli chcesz mieć uporządkowane dane wyjściowe, takie jak wyświetlane na połączonej stronie, dane losowe są prawdopodobnie _nie_, co chcesz. – SevenBits
Tak, ale chodzi o to, że jest to próba wykazania, że losowe dane nie są przypadkowe. Obraz wyświetlany na stronie linku ma być spisem stu tysięcy liczb losowych. (Jestem ciekawy, czy "każdy punkt reprezentuje 3 kolejne wartości pseudolosowe" oznacza, że każde trzy liczby są używane jako współrzędne x, y, z punktu? –
Myślę, że powinieneś wypróbować 3D. –