PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Zufallszahlen


Asmodeus
2006-11-03, 07:57:58
Ich habe ein Programm geschrieben, welches ich als Kommandozeilenversion und innerhalb eines anderen Programmes nutze. Das Programm greift dabei auch auf die Funktionalität einer Lib zu, welche ich mit einbinde. Innerhalb der Lib werden auch Zufallszahlen generiert.

Vereinfacht gesagt habe ich nun folgendes Problem. Wenn ich die Kommandozeilenversion des Programmes starte, dann liefert mir die Lib an Stelle A beispielsweise den Randomwert 0.6. Danach wird das Programm beendet. Starte ich nun das Kommandozeilenprogramm erneut, so liefert es mir an Stelle A wieder den Randomwert 0.6. So soll es auch sein.

Wenn ich das Programm nun in ein anderes Programm einbinde (erzeuge mir ein Objekt, oder den Pointer auf ein Objekt), dann gibt es jedoch Probleme. Wenn ich das erste Mal an Stelle A komme, dann wird mir auch wieder der Randomwert 0.6 geliefert, wenn ich zu einem späteren Zeitpunkt wieder an Stelle A komme, dann weicht der Randomwert jedoch von der vorherigen 0.6 ab.

Die Frage ist nun, welche Möglichkeiten ich habe, oder was in der Lib geändert werden müsste, damit das Programm innerhalb eines anderen Programmes die selbe Funktionsweise aufweist, wie als Kommandozeilenprogramm.

Gruss, Carsten.

Shink
2006-11-03, 08:12:16
Hmm... klingt eigentlich ganz logisch: Die Lib nimmt vermutlich immer den gleichen Seed her, wodurch die 1., 2., 3., etc. Zufallszahl immer die selbe ist.
Wenn du die Kommandozeilenversion hernimmst, initialisiert sich die Lib bei jedem Start; ansonsten nur beim ersten Start; dann bekommst du die zweite Zufallszahl. Da wir natürlich alle nicht wissen, welche Lib du verwendest, kann dir leider auch niemand, der deine Lib vielleicht kennt, sagen, wie man darauf ein "Reset" o.ä. ausführt.

Asmodeus
2006-11-03, 08:41:52
Hmm... klingt eigentlich ganz logisch: Die Lib nimmt vermutlich immer den gleichen Seed her, wodurch die 1., 2., 3., etc. Zufallszahl immer die selbe ist.
Wenn du die Kommandozeilenversion hernimmst, initialisiert sich die Lib bei jedem Start; ansonsten nur beim ersten Start; dann bekommst du die zweite Zufallszahl. Da wir natürlich alle nicht wissen, welche Lib du verwendest, kann dir leider auch niemand, der deine Lib vielleicht kennt, sagen, wie man darauf ein "Reset" o.ä. ausführt.

Die Lib ist eine Eigenproduktion von jemand anderem. Da ich den Programmierer kenne, müsste ich ihm also mitteilen, dass er die Intitialisierung des Randomgenerators modifizieren soll, damit die Sache funktioniert, wenn ich Dich richtig verstanden habe.

Gruss, Carsten.

Magnum
2006-11-03, 10:07:05
Wo liegt der Sinn eines Zufallszahlengenerators, wenn man die Zahlen, die rauskommen, vorher genau kennt?

Wenn du sie immer gleich haben willst, kannst du dir auch einfach ne kleine Funktion selbst schreiben. z.B.
x(n+1) = (A*x( n ) + B) mod P
(A und B ungleich 0 und P am besten ne Primzahl) Diese Funktion liefert dir auch annähernd gleichverteilte Zufallszahlen zwischen 0 und P-1 und mit den gleichen Startwerten kommt immer dasselbe heraus!

Shink
2006-11-03, 13:25:42
Wo liegt der Sinn eines Zufallszahlengenerators, wenn man die Zahlen, die rauskommen, vorher genau kennt?

Öhm... Reproduzierbarkeit von Fehlern z.B.?


Wenn du sie immer gleich haben willst, kannst du dir auch einfach ne kleine Funktion selbst schreiben. z.B.
x(n+1) = (A*x( n ) + B) mod P
(A und B ungleich 0 und P am besten ne Primzahl) Diese Funktion liefert dir auch annähernd gleichverteilte Zufallszahlen zwischen 0 und P-1 und mit den gleichen Startwerten kommt immer dasselbe heraus!

Nun ja, irgendsoetwas wird die Lib, die er verwendet, wohl tun. Obwohl, wer weiß: Vielleicht ist es ein optimierter RNG für spezielle Zwecke oder was weiß ich...