Hi, also wenn ich eine Zufallszahl haben will geh ich folgender maßen vor: srand(time()); x=rand(); srand setzt den seed. Meine Frage zu diesem seed. Ist der seed der ausgangswert für den Zufallsalgorithmus oder was stellt dieser seed da? danke philipp
Philipp Otte schrieb:
Hi, also wenn ich eine Zufallszahl haben will geh ich folgender maßen vor:
srand(time()); x=rand();
srand setzt den seed. Meine Frage zu diesem seed. Ist der seed der ausgangswert für den Zufallsalgorithmus oder was stellt dieser seed da?
seed ist ein Initialisierungsparameter für den Zufallszahlengenerator. Damit wird verhindert, dass bei jedem Programmlauf die gleiche Folge von Zufallszahlen erzeugt wird. -- Alex
Ja, aber wie funktioniert das? ISt der seed nur der Ausgangswert des Algorithmus oder wie? Am Sam, 2004-01-10 um 12.25 schrieb Alexander Veit:
Philipp Otte schrieb:
Hi, also wenn ich eine Zufallszahl haben will geh ich folgender maßen vor:
srand(time()); x=rand();
srand setzt den seed. Meine Frage zu diesem seed. Ist der seed der ausgangswert für den Zufallsalgorithmus oder was stellt dieser seed da?
seed ist ein Initialisierungsparameter für den Zufallszahlengenerator. Damit wird verhindert, dass bei jedem Programmlauf die gleiche Folge von Zufallszahlen erzeugt wird.
-- Alex
On Sat, 2004-01-10 at 13:11, Philipp Otte wrote:
Ja, aber wie funktioniert das? ISt der seed nur der Ausgangswert des Algorithmus oder wie? Kommt darauf an was du unter Ausgangswert verstehst.
Es ist nicht der Anfangswert der Zufallszahlen. Es ist ein Startwert für den *Pseudo*-Zufallszahlengenerator. Wird immer der gleiche Startwert verwendet, liefert der Algorithmus immer die gleiche Zufallszahlenfolge (Die Zahlenwerte sind "zufällig" verteilt, aber nicht wirklich zufällig).
Am Sam, 2004-01-10 um 12.25 schrieb Alexander Veit:
Philipp Otte schrieb:
Hi, also wenn ich eine Zufallszahl haben will geh ich folgender maßen vor:
srand(time()); x=rand();
srand setzt den seed. Meine Frage zu diesem seed. Ist der seed der ausgangswert für den Zufallsalgorithmus oder was stellt dieser seed da?
seed ist ein Initialisierungsparameter für den Zufallszahlengenerator. Damit wird verhindert, dass bei jedem Programmlauf die gleiche Folge von Zufallszahlen erzeugt wird.
Umgekehrt ist es vielleicht leichter verständlich: Wird immer die gleiche "Seed" verwendet, liefert der Algorithmus immer die gleiche, zufällig verteilte Zahlenfolge. Ralf
Hi Philipp! Philipp Otte schrieb:
Ist der seed der ausgangswert für den Zufallsalgorithmus oder was stellt dieser seed da?
Ja, der Seed ist eine Art Initialwert, von dem aus die Pseudozufallszahlenfolge generiert wird. Für viele Anwender ist die Reproduzierbarkeit von Pseudozufallszahlen essentiell. So setzen beispielsweise Simulatoren (z.B. Automod) exzessiv Pseudozufallszahlen ein, da die Reproduzierbarkeit von Ergebnissen eine grundlegende Forderung in der Simulationstechnik ist. Da der Seed die Pseudozufallszahlenfolge bestimmt, kann man Pseudozufallszahlen einfach reproduzieren, indem man den gleichen Seed noch einmal benutzt. Das oben erklärte bezieht sich allgemein auf Pseudozufallszahlen. Leider weiß ich nicht, wie rand() in C genau implementiert ist. Wenn ich mich im Bezug auf rand() in C täusche, wird sich sicherlich jemand melden und mich verbessern ;-) Gruß, Michael
Michael Wenger schrieb:
Das oben erklärte bezieht sich allgemein auf Pseudozufallszahlen. Leider weiß ich nicht, wie rand() in C genau implementiert ist. Wenn ich mich im Bezug auf rand() in C täusche, wird sich sicherlich jemand melden und mich verbessern ;-)
Hallo Michael et. al.: Die rand()-Funktion arbeitet nach der Formel x = (a * x + c) % m (% ist der Modulo-Operator) wobei x die erzeugte Zufallszahl ist (die für den nächsten Aufruf in der C-Bibliothek zwischengespeichert wird) und a, c, m Konstanten sind, die so ausgewählt sind, dass die erzeugten Zahlen möglichst gut eine Gleichverteilung approximieren, zum Beispiel (ich glaube, im Berkeley-Compiler) a = 1103515245, c = 12345 und m = 2^31. m ist die Periode, d. h. nach 2^31 Durchläufen wiederholen sich die Zahlen. Freundliche Grüße Michael Detambel BFW Oberhausen
On Mon, 2004-01-12 at 09:34, Michael Detambel wrote:
Michael Wenger schrieb:
Das oben erklärte bezieht sich allgemein auf Pseudozufallszahlen. Leider weiß ich nicht, wie rand() in C genau implementiert ist. Wenn ich mich im Bezug auf rand() in C täusche, wird sich sicherlich jemand melden und mich verbessern ;-)
Hallo Michael et. al.:
Die rand()-Funktion arbeitet nach der Formel x = (a * x + c) % m
Nein. Genauer: Es mag Implementierungen geben, die nach dieser Formel arbeiten, es ist aber nirgends festgeschrieben und damit irrelevant. SUSv3 sagt dazu: The rand() function shall compute a sequence of pseudo-random integers in the range [0, {RAND_MAX}] [XSI] [Option Start] with a period of at least 232 Ralf
Ralf Corsepius schrieb:
Nein. Genauer: Es mag Implementierungen geben, die nach dieser Formel arbeiten, es ist aber nirgends festgeschrieben und damit irrelevant. SUSv3 sagt dazu: The rand() function shall compute a sequence of pseudo-random integers in the range [0, {RAND_MAX}] [XSI] [Option Start] with a period of at least 232
Richtig, aber das ist die Antwort für den Compiler-Bauer. Ich hatte dagegen den Eindruck, dass der Fragesteller Schwierigkeiten hatte, sich einen konkreten Mechanismus zur Erzeugung von Pseudo-Zufallszahlen vorzustellen und hielte meine Antwort daher schon für relevant. Ich hätte allerdings präziser formulieren müssen: "Eine häufig anzutreffende Implementierung zur Erzeugung gleichverteilter Zufallszahlen arbeitet nach der Formel ... (lineare Kongruenzmethode). Daneben gibt es weitere Verfahren, wie die Middle-Square-Methode von J. v. Neummann, die Verwendung irrationaler Zahlen (Pi) etc. pp." Freundliche Grüße Michael Detambel BFW Oberhausen
participants (5)
-
Alexander Veit
-
Michael Detambel
-
Michael Wenger
-
Philipp Otte
-
Ralf Corsepius