Zufallsgenerator
-
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...