Zufallszahlen von PHP berechnen | Webcamzugriff WinAPI

Biehler

BiehlerProductions
ID: 89792
L
4 Mai 2006
1.948
181
Hi,
ich will eine Facharbeit schreiben über Zufallszahlen und Generatoren.
Bin im Moment etwas am Stoff sammeln und basteln.

Ein Themenpunkt soll auch sein, die Random Funktion in PHP zu "zerlegen".
Quasi aufzeigen dass sich die Zufallszahlen in Abhängigkeit vom Initiator berechnen lassen und so Vorhersagen treffen lassen, welche Zahlen vorrangig auftreten werden, wenn man z.b. die aktuelle zeit als Initiator benützt.

Weis jemand, welcher Algorithmus der PHP Random Funktion zugrunde liegt?

Hat sich evtl schonmal wer mit dem Thema befasst und kann mir ein paar Tips geben?

Nebenbei brauch ich für das Projekt eine Webcam.
Ich muss nun abhänggi von einem Ereignis im 10 Sekundendurchschnittstakt (vermutlich) Bilder machen.
Klar könnt ich jetzt ne WebCam Software nehmen, Handle aufs Fenster und Button klicken lassen.
Is mir aber zu umständlich, da Windows auch auf die Webcam zugreifen kann und eigentlich jede andere Popelanwendung auch, vermute ich, dass es da eine WinAPI Funktion geben muss :mrgreen:
Falls jemand da zufällig was weis, wär ich froh über Infos^^
Hab selber noch kaum gesucht, der Gedanke kam mir grad erst und dann hab ich ihn halt mit in den Thread gepackt.
 
Weis jemand, welcher Algorithmus der PHP Random Funktion zugrunde liegt?
PHP is offen, sieh selber nach :p :biggrin:
PHP:
/* SYSTEM RAND FUNCTIONS */

/* {{{ php_srand
 */
PHPAPI void php_srand(long seed TSRMLS_DC)
{
#ifdef ZTS
    BG(rand_seed) = (unsigned int) seed;
#else
# if defined(HAVE_SRANDOM)
    srandom((unsigned int) seed);
# elif defined(HAVE_SRAND48)
    srand48(seed);
# else
    srand((unsigned int) seed);
# endif
#endif

    /* Seed only once */
    BG(rand_is_seeded) = 1;
}
/* }}} */

/* {{{ php_rand
 */
PHPAPI long php_rand(TSRMLS_D)
{
    long ret;

    if (!BG(rand_is_seeded)) {
        php_srand(GENERATE_SEED() TSRMLS_CC);
    }

#ifdef ZTS
    ret = php_rand_r(&BG(rand_seed));
#else
# if defined(HAVE_RANDOM)
    ret = random();
# elif defined(HAVE_LRAND48)
    ret = lrand48();
# else
    ret = rand();
# endif
#endif

    return ret;
}
/* }}} */
Quelle: PHP 5.2.9 /ext/standard/rand.c

Du siehst, der ganz normale Aufruf der C-Funktion rand().
Du siehst auch, dass seit PHP 4.2.0 der Zufallsgenerator automatisch initialisiert wird. Willst du also Zufallszahlen reproduzieren, so nimm eine ältere Version oder initialisiere mit srand() selber.
 
Lol auf die Idee bin ich gar ned gekommen :ugly:
Gut, dann muss ich mal sehen, wie das in C funzt.

Im endeffekt will ich halt echte Zufallszahlen (die durch Würfeln und gegebenfalls durch das Rauschen einer ZDiode zustande kommen) mit den Zufallszahlen von komplexen Algorithmen und einfachen Algorithmen vergleichen.
Ich hatte eben gehofft, dass in PHP oder einer anderen Sprache ein Algorithmus verwendet wird, der sich aufs minimalistischte beschränkt, damit ich überhaupt iwas zum Meckern hab.
Aber im endeffekt wirds wohl eh darauf rauslaufen, dass jeder Algorithmus Verteilungen liefert, die mit echten Werten übereinstimmen...

Du hast ned zufällig nen Plotter zuhause rumstehen, oder?^^
Ich bräuchte ein paar symbole, milimetergenau zugeschnitten und gedruckt auf selbstklebender Folie^^

//edit:
@ice
thx fürs Stichwort!
 
informier dich mal wie lange die Periode z.B des Mersenne-Twisters ist, du wirst also durch ausprobieren keine Unterschiede zwischen diesem Algorithmus und echten Zufallszahlen auf Basis radioaktiven Zerfalls feststellen können.