Zufallsgenerator



  • danke für eure tipps,

    aber beide varianten führten leider nicht zum erfolg.
    ob ich

    srand( (unsigned) time(NULL) );
    

    in oder auserhalb der schleife platziere macht keinen unterschied.

    auch bei der anderen variante kommt von 10 durchgängen 8 mal die selbe zahl.



  • Vielleicht zeigst Du mal den ganzen Code.



  • Probier ansonsten mal einen anderen seed aus.



  • gewup schrieb:

    ob ich

    srand( (unsigned) time(NULL) );
    

    in oder auserhalb der schleife platziere macht keinen unterschied.

    Das kann ich dir nicht wirklich glauben. Zeig doch mal, wie du es umgesetzt hast.

    Und statt

    srand( (unsigned) time(NULL) );
    

    würde ich Folgendes schreiben:

    srand(static_cast<unsigned>(time(0)));
    


  • Bei rnd's Beispiel würde ich vlt. noch "#include <ctime>" einbinden...dann dürfte es funktionieren.



  • danke für eure hilfe

    mit

    srand(static_cast<unsigned>(time(0)));
    

    außerhalb der schleife hat es funktioniert

    👍 👍 👍



  • Hast du auch verstanden warum?



  • nunja...

    ich vermute mal dass mein zuffalsgenerator sonst immer mit dem selben start wert angefangen hat und ihc ihm nun so durch die uhrzeit jedesmal einen anderen wert gebe, oder???

    aber exaktere erklärung bzw genauere erklärung was das genau bewirkt könnte glaub net schade 😃



  • Die Zufallszahlen sind eine deterministische Kette. Das heißt die sind immer gleich. Jedesmal. Deswegen wählt man mit "seed" einen Anfangspunkt in der Kette und holt sich mit rand jedesmal das nächste Element der Kette.

    In deinem ersten Fall hattest du jedesmal, vor jedem rand-Aufruf, den Anfangspunkt neu gesetzt, und zwar auf time(0). Und da time(0) sich nur jede Sekunde ändert und das eine lange Zeit (in Code) ist, liest du also immer nur ein Element vom Ausgangspunkt aus ein. Und zwar immer das gleiche.

    Das ganze wirft sowieso ein Problem auf: Kennt man den seed und weiß wo man sich in der Kette befindet (sprich wie oft rand schon aufgerufen wurde) oder hat sonstige Daten (welche Zufallszahlen waren zuletzt?) kann man die nächste vorhersagen.

    Nützlich ist "seed" auch wenn man bestimmte Zufälle wieder herstellen will. Gerade bei Spielen sehr sehr nützlich. Denn bei der zufälligen Levelerstellung kann man so durch Eingabe eines beliebigen seeds immer wieder die gleichen Level erstellen. Oder beim Speichern den seed mitgeben, so daß ein erneutes Laden nicht zum Schummeln genutzt werden kann. etc. pp.



  • noch eine frage::

    srand(static_cast<unsigned>(time(0)));
    

    was bedeutet das

    static_cast<unsigned>
    

    genau??



  • gewup schrieb:

    was bedeutet das

    static_cast<unsigned>
    

    genau??

    Kurz gesagt: Eine geprüfte Umwandlung (Cast) in ein unsigned [int]. Wobei ich persönlich das unsigned int ausschreibe...

    cu André



  • asc schrieb:

    Wobei ich persönlich das unsigned int ausschreibe...

    Mach ich sonst auch immer. Ich wollte das Beispiel einfach nur so wenig wie möglich abändern...


Anmelden zum Antworten