Wie funktioniert ein einfacher Pseudo-Zufallszahlengenerator?
Wie funktioniert ein einfacher Pseudo-Zufallszahlengenerator?
Wie funktioniert ein einfacher Pseudo-Zufallszahlengenerator (z.B. in Pascal)? Ich hätte das gerne an einem möglichst einfachen Beispiel erklärt gehabt, sodass ich es mit meinen bescheidenen Mathematik-Kenntnissen nachvollziehen kann. So viel ich weiß, wird der seed-Wert mit der Systemzeit initialisiert. Danke für jegliche Hilfe.
Re: Wie funktioniert ein einfacher Pseudo-Zufallszahlengenerator?
Hallo,
wie einfach darf er denn sein?
Ich hatte schon Anwendungsfälle wo
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
(* Platte "C nach Pascal"-Portierung *)
VAR zz : INTEGER; (* Der "Zufallswert" - in Pascal gibts nicht sowas wie "static"? *)
FUNCTION rnd(): INTEGER;
BEGIN zz:=zz+1;IF zz>9 THEN zz:=0;
rnd:=zz END;
</font><hr></pre></blockquote>
gereicht hat.(Sprich 0123456789012345678901234567...)
Das ISO-C rand() (wohl der billigste Zufallsgenerator den es gibt <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle"> )funktioniert afaik nach
r:=(a*r + c)%m
Auf meinem System sind die Werte für a:=1103515245, für c:=12345 und für m:=(2^31).
Das erste r wird dabei von srand gesetzt. Alle anderen Werte sind also davon Abhängig.
Gruss
wie einfach darf er denn sein?
Ich hatte schon Anwendungsfälle wo
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
(* Platte "C nach Pascal"-Portierung *)
VAR zz : INTEGER; (* Der "Zufallswert" - in Pascal gibts nicht sowas wie "static"? *)
FUNCTION rnd(): INTEGER;
BEGIN zz:=zz+1;IF zz>9 THEN zz:=0;
rnd:=zz END;
</font><hr></pre></blockquote>
gereicht hat.(Sprich 0123456789012345678901234567...)
Das ISO-C rand() (wohl der billigste Zufallsgenerator den es gibt <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle"> )funktioniert afaik nach
r:=(a*r + c)%m
Auf meinem System sind die Werte für a:=1103515245, für c:=12345 und für m:=(2^31).
Das erste r wird dabei von srand gesetzt. Alle anderen Werte sind also davon Abhängig.
Gruss
Re: Wie funktioniert ein einfacher Pseudo-Zufallszahlengenerator?
<Fachsimpelei>Computer können keine Zufallszahlen erzeugen, da sie deterministische Geräte sind.</Fachsimpelei>
Die genannte Formel
r<sub>n</sub> = ( r<sub>n-1</sub> * a + c ) % m
ist - obwohl sehr einfach - für fast alle Anwendungen ausreichend, allerdings nur, wenn die multiplikative Konstante a gut gewählt wird. Es gibt da recht komplizierte mathematische Untersuchungen, wie a aufgebaut sein muss, damit die folgenden Werte möglichst "zufällig" (richtiger wäre "beliebig") sind. Da müsste man mal im Netz recherchieren, im Kopf habe ich das leider nicht mehr. (Ich glaube mich zu erinnern, dass man gute Werte bekommt, wenn man Zahlen wählt, die auf "421" enden.)
Man muss natürlich mit einem möglichst zufälligen Startwert (r<sub>0</sub>) beginnen, wie schon erwähnt kann das bspw. die Systemzeit sein.
Die genannte Formel
r<sub>n</sub> = ( r<sub>n-1</sub> * a + c ) % m
ist - obwohl sehr einfach - für fast alle Anwendungen ausreichend, allerdings nur, wenn die multiplikative Konstante a gut gewählt wird. Es gibt da recht komplizierte mathematische Untersuchungen, wie a aufgebaut sein muss, damit die folgenden Werte möglichst "zufällig" (richtiger wäre "beliebig") sind. Da müsste man mal im Netz recherchieren, im Kopf habe ich das leider nicht mehr. (Ich glaube mich zu erinnern, dass man gute Werte bekommt, wenn man Zahlen wählt, die auf "421" enden.)
Man muss natürlich mit einem möglichst zufälligen Startwert (r<sub>0</sub>) beginnen, wie schon erwähnt kann das bspw. die Systemzeit sein.
Re: Wie funktioniert ein einfacher Pseudo-Zufallszahlengenerator?
> <Fachsimpelei>Computer können keine Zufallszahlen erzeugen, da sie deterministische Geräte sind.</Fachsimpelei>
Ich denke, dass es sinnvoll ist, Zufälligkeit als die Grösse der kleinsten Turingmaschine die diese Folge erzeugen kann, zu definieren.
Das musste mal gesagt werden... <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">
Ich denke, dass es sinnvoll ist, Zufälligkeit als die Grösse der kleinsten Turingmaschine die diese Folge erzeugen kann, zu definieren.
Das musste mal gesagt werden... <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">
Re: Wie funktioniert ein einfacher Pseudo-Zufallszahlengenerator?
Moin
Wer googlet, der findet <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">:
http://home.t-online.de/home/poisoner/krypto/prngs.htm
Gruß
Marc
Wer googlet, der findet <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">:
http://home.t-online.de/home/poisoner/krypto/prngs.htm
Gruß
Marc