sehr zufällige zufallszahl



  • Hi!

    Für mein Programm brauch ich etwas, damit ich schon sehr sehr zufällige Zufallszahlen brauche. Ich muss ca. 20 Zufallszahlen im Bereich von 5-6 verschiedenen Ergebnissen (also sehr wenig) und das spielt sich in einer Zeit von ca. 2-3 Sekunden ab.

    srand(time(NULL));
    

    war meine besherige Anwendung - gibt es Möglichkeiten, die das ganze zufälliger gestalten?

    mfg XaTrIxX



  • srand solltest du nur einmal aufrufen. am besten zu beginn des programms.
    ansonsten musst du dir überlegen, die seeds von woanders als time zu bekommen (/dev/random vielleicht) - und du könntest nachsehen, ob die C++09 zufallsgeneratoren von deiner standardbibliothek schon unterstützt werden, die bieten einiges an guter funktionalität.



  • die boost Biblothek bietet sehr umfassende Möglichkeiten Zufallszahlen zu generieren - da kann man z. B. eine Verteilung angeben usw.



  • Alternativ könntest du selber einen der momentan besten Zufallszahlengeneratoren implementieren, falls du an wirklich guten (Pseudo-)Zufallszahlen interessiert bist. Schau dazu mal unter Mersenne Twister in Wikipedia nach.

    Ich hab ihn bereits selber implementiert und eigentlich gute Erfahrungen gemacht. Allerdings ist eine Überlegenheit gegenüber dem Standardgenerator nicht gut ersichtlich und dessen Nachweis würde wohl einige mathematische Tests erfordern.



  • queer_boy schrieb:

    srand solltest du nur einmal aufrufen. am besten zu beginn des programms.
    ansonsten musst du dir überlegen, die seeds von woanders als time zu bekommen (/dev/random vielleicht) - und du könntest nachsehen, ob die C++09 zufallsgeneratoren von deiner standardbibliothek schon unterstützt werden, die bieten einiges an guter funktionalität.

    Falsch, -100 Punkte! Man sollte sooft wie möglich

    srand(time(NULL));
    

    aufrufen. Dann werden die Zahlen zufälliger!



  • Kenner des Zufalls schrieb:

    queer_boy schrieb:

    srand solltest du nur einmal aufrufen. am besten zu beginn des programms.
    ansonsten musst du dir überlegen, die seeds von woanders als time zu bekommen (/dev/random vielleicht) - und du könntest nachsehen, ob die C++09 zufallsgeneratoren von deiner standardbibliothek schon unterstützt werden, die bieten einiges an guter funktionalität.

    Falsch, -100 Punkte! Man sollte sooft wie möglich

    srand(time(NULL));
    

    aufrufen. Dann werden die Zahlen zufälliger!

    Das ist vollkommen falsch. srand() dient lediglich dazu, einen Startwert zu setzen, damit nicht bei jedem Programmaufruf die selben Zufallszahlen erzeugt werden. Damit aber die Anforderungen an Zufallszahlen (z.B. Gleichverteilung, geringe Korrelation etc.) erfüllt werden können, muss mit dem Algorithmus von rand(), also dem Zufallszahlengenerator, gearbeitet werden.



  • Kenner des Zufalls schrieb:

    queer_boy schrieb:

    srand solltest du nur einmal aufrufen. am besten zu beginn des programms.
    ansonsten musst du dir überlegen, die seeds von woanders als time zu bekommen (/dev/random vielleicht) - und du könntest nachsehen, ob die C++09 zufallsgeneratoren von deiner standardbibliothek schon unterstützt werden, die bieten einiges an guter funktionalität.

    Falsch, -100 Punkte! Man sollte sooft wie möglich

    srand(time(NULL));
    

    aufrufen. Dann werden die Zahlen zufälliger!

    <°)))o><



  • ok problem gelöst es geht gut, nach einigen tests passts:

    srand(time(NULL));
    
    int zufall = (12*(rand()/(RAND_MAX+1.0)));
    

    diese lösung hat genug "zufälligkeit" gebracht.

    Danke!


Anmelden zum Antworten