Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

18.03.2009, 20:04

Schneller Zufallsgenerator

Ist ja fast schon peinlich immer so Threads mit Anfängerfragen aufzumachen, aber ich hab schon überall gesucht :?

Und zwar muss ich mehrere Zufallszahlen ganz schnell hintereinander erzeugen, und das mehrmals hintereinander.

Die "verbreitetste" Methode ist ja

C-/C++-Quelltext

1
srand(time(NULL)) // um den Zufallsgenerator zu initialisieren


und wenn man Zufallszahlen braucht diese mit rand() errechnen.

Das Problem ist aber, dass sich dieser Generator ja nur einmal pro Sekunde aktualisiert, da er dann erst einen neuen Startwert von time() kriegt.

Gibt es also einen schnelleren Zufallszahlengenerator?

Ich habe schon von

C-/C++-Quelltext

1
srand(time(clock())


gelesen. Ist das auch richtig so, dass man einfach nur time(NULL) gegen clock() austauschen muss und den Generator ansonsten genauso verwendet wie sonst?
Und was ist der Unterschied zwischen den beiden Methoden?

Gruß Sechem :!:

2

18.03.2009, 20:10

srand() setzt einen Startwert für den zufallsgenerator, und rand() liefert den aktuellen Wert und geht einen Schritt weiter. dementsprechend ist der unterschied eifnasch die funktion, die den startwert liefert.

3

18.03.2009, 20:18

Also ist es richtig, dass ich clock() einfach anstatt time(NULL) einsetzen kann?

Aber aus welchem Grund werden dann schnellere Zufallszahlen geliefert?

4

18.03.2009, 20:43

Wieso möchtest du den Zufallsgenerator so schnell hintereinander initialisieren?

5

18.03.2009, 20:45

Ich brauche ganz schnell hintereinander mehrere Zufallszahlen, um bestimmte zufällige Bewegungen zu "errechnen".

Das mache ich über eine for-Schleife, die mehrmals aufgerufen wird. Deswegen brauche ich ganz schnell ganz viele Zufallszahlen und das immer wieder ^^

6

18.03.2009, 20:49

Kannst du nicht einfach ein Mal initialisieren und dann beliebig viele Zufallszahlen ziehen?

C-/C++-Quelltext

1
2
3
4
srand(time(NULL));

for(int i=0; i<10000; i++)
    cout << rand() << endl;

7

18.03.2009, 20:59

So mache ich das auch, aber dann klappt nur der eine Teil: ich kriege wirklich mehrere verschiedene Zufallszahlen raus.

Aber(!): Wenn ich dann nochmal so viele Zufallszahlen haben will, also die for-Schleife in der gleichen Sekunde nochmal aufrufe, kommen wieder genau die gleichen Zahlen.

Mit clock() anstelle von time(NULL) klappt es jetzt, verstehe nur nicht warum!

Und ich habe übrigens weder time.h noch stdlib.h includet, trotzdem laufen die Zufallsgeneratoren, ich krieg auch keine Compilerwarnung. Ist es nicht nötig, diese Bibliotheken einzubauen?

MasterK

Frischling

Beiträge: 92

Wohnort: Koblenz

Beruf: Teamleiter Softwareentwicklung

  • Private Nachricht senden

8

18.03.2009, 21:06

Zitat von »"Sechem"«

Aber(!): Wenn ich dann nochmal so viele Zufallszahlen haben will, also die for-Schleife in der gleichen Sekunde nochmal aufrufe, kommen wieder genau die gleichen Zahlen.

Natürlich. Wie wärs wenn du den zufallszahlengenerator EINMAL initialisierst und nicht vor jedem schleifendurchlauf?

9

18.03.2009, 21:10

Achso.......
OK, so klappts auch wie ich grade sehe vielen Dank :)

Was ich trotzdem nicht verstehe: wieso ist es offenbar nicht notwendig, time.h zu includen?

10

18.03.2009, 22:26

Also, habs jetzt doch includet..

Aber ich hab schonmal gelesen, dass es das in C++ eigentlich gar nicht gibt? Und dass man stattdessen Ctime einbindet..? Was ist denn richtig?

Und vor allem, wieso klappt es auch ohne überhaupt irgendwas einzubinden?

Werbeanzeige