Richtiger Zufall??????



  • moin...

    Gibt es eine bessere möglichkeit für den Zufall, als rand() oder random()????

    Diese Funktionen geben nach einem Progneustart immer die selbe zahlenreihe zurück....

    z.B.:
    4, 3, 7, 1, 5, 6...
    Neustart...
    4, 3, 7, 1, 5, 6...

    Das kann man wohl kaum noch Zufall nennen...

    gibts da andere Funktionen oder eventuell DLLs irgendwo???



  • rand() basiert auf einem Zufallszahlengenerator der mit einer Zahl initialisiert wird. Ist diese Zahl gleich, bzw. wird die Initialisationsfunktion gar nicht aufgerufen, werden jedesmal die selben Zahlen generiert.

    Ein:

    #include <cstdlib>
    #include <ctime>
    
    int main ()
    {
        srand(time(0));
    
        // Ab hier liefert rand() Zufallszahlen
    }
    

    wirkt Wunder 😉

    MfG SideWinder



  • YEAH!!! THX! 😃



  • Diese Funktion liefert aber auch nur eine Pseudorandomfolge,und zwar die zu dieser Zeit passt. In Summe ist rand ein eher mittelmäßiger Zufallszahlnegenerator, wenn du bessere braucht solltest du mal mit Google suchen

    oder diesen Beitrag mal anschauen

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-43015-and-highlight-is-random.html



  • Wenn die Zufälligkeit der Zahlen so wichtig ist, dass der User die Absicht haben könnte die Systemzeit dem Programm auf irgendeine Weise beim Aurfuf von time(0) selbst bekanntzugeben (nur um jedes Mal beim Start den selben Tip zu bekommen...) dann schreib ich mir sowieso was eigenes - bzw. im Notfall steige ich auf Hardware um.

    Aber warum ich bei Tetris 2 nicht den nächsten Stein per rand() aussuchen darf ist mir Schleierhaft, und auf rand() wird in letzter Zeit von allen möglichen Leuten hingehackt.

    Wo genau habt ihr schonmal so tolle richtige Zufallszahlen benötigt, dass rand() nicht reicht?

    MfG SideWinder



  • ...oder mittels CryptGenRandom() aus Microsoft's Cryptography-API



  • SideWinder schrieb:

    ...

    und wenn die kids irgend ein GeekCryptoMegaRand() benutzen, was soll's. ist hat die exe größer und lahmer.
    wirklich grausam ist es dann, wenn GeekCryptoMegaRand()%10 gerechnet wird, woduch eine schieflage in der verteilung entsteht, und das einfachste rand() -korrekt verwendet- wesentlich besseren zufall erzeugen würde. wobei natürlich rand()%10 ausreicht.
    ich habe den eindruck, daß die rand()-meider jedesmal null ahnung von mathe haben.



  • 😃



  • oder ihr bastelt euch sowas: http://www.robertnz.net/hwrng.htm



  • Wo genau habt ihr schonmal so tolle richtige Zufallszahlen benötigt, dass rand() nicht reicht?

    Rißwachstumssimulation.

    rand() ist für statistische Zwecke (z.B. Monte-Carlo-Simulation) nicht geeignet, ist aber gut genug, damit es "zufällig aussieht".



  • rand() ist für statistische Zwecke (z.B. Monte-Carlo-Simulation) nicht geeignet, ist aber gut genug, damit es "zufällig aussieht".

    rand()%10 hat ne schlimme statistische schieflage.
    rand() ist für monte-carlo durchaus fein.
    kann es sein, daß du da was verwechselt hast?



  • rand() "klumpt": wenn du N aufeinanderfolgende ZZ als Koordinate in RN verwendest, sind die Punkte nicht gleichverteilt.

    (Es sei denn ich hab damals blödsinn gemacht 🙂 )



  • peterchen schrieb:

    rand() "klumpt": wenn du N aufeinanderfolgende ZZ als Koordinate in RN verwendest, sind die Punkte nicht gleichverteilt.

    (Es sei denn ich hab damals blödsinn gemacht 🙂 )

    punkt für dich.

    es gibt rand()-implemetierungen, die im phasenraum grottig abschneiden. in der tat. es gab sogar welche, die bei for(;;}putpixel(rand()%640,rand()%480,WHITE); deutlich sichtbare muster erzeugten.
    mir ist das noch nicht passiert. mein raum hatte meistens nur eine dimension und manchmal zwei. selbst wenn das aktuelle rand() für zwei diemensionen immer sauber wäre - ich muss dir recht geben, daß ich das für 6 dimensionen (und schnell braucht man mal 2 zufällige punkte in 3d) gar nicht von rand() erwarten würde.


Anmelden zum Antworten