[Tiptoi] Pseudo Zufallsgenerator

Marcel Eilers marcel.eilers at t-online.de
Mo Sep 17 14:05:49 CEST 2018


Hallo Jürg und Christoph,

 

vielen Dank für Eure Erklärungen. Damit bin ich nun wieder etwas schlauer.

Ich werde dann zukünftig folgende Generator verwenden:

 

- T($r,65536) $wuerfel+=$r $wuerfel*=25173 $wuerfel+=13849 $wuerfel%=6
$wuerfel+=1

 

Somit spare ich wenigstens noch einen Befehl und komme dann mit J() und P()
auf 8 Befehle. Das reicht für meine Programmierung.

 

Vielen Dank Euch.

Gruß

Marcel

 

 

Von: tiptoi [mailto:tiptoi-bounces at lists.nomeata.de] Im Auftrag von
Christoph Weber
Gesendet: Montag, 17. September 2018 08:47
An: tiptoi at lists.nomeata.de
Betreff: Re: [Tiptoi] Pseudo Zufallsgenerator

 

Hi Marcel,

ich versuch mal eine kurze Erklärung was hier passiert:

T($r, 65535) liest den Timer aus und "begrenzt" ihn über die modulo-funktion
auf 0-65535.

Das register $rnd enthält den aktuellen Zufallszahlen-Seed-Wert; initial 0,
nach $rnd+=$r steht darin die maskierte Zeit von eben. Beim nächsten
Durchlauf (also nächster Zufallszahl) wird wieder die aktuelle Zeit addiert
um eine zufälligere Streuung zu erzeugen. 

Danach wird der Wert mit 25173 multipliziert -  der Wert ist relativ
willkürlich aber in der Literatur und typischen Implementierungen zu finden;
ebenso der Werte 13849 der aufaddiert wird. Das ganze dient nur dazu bei
jeder Zufallszahl einen neuen seed-Wert zu bekommen aus dem die eigentliche
Zufallszahl berechnet wird.

Man kann für die beiden Konstanten auch andere Werte verwenden, aber bei
ungeeigneten Konstanten ist der Zufall halt schlechter oder gar nicht mehr
vorhanden (z.B. Multipliator 0 oder 1 oder beim offset kleine Zahlen. Der
Multiplikator sollte z.B. auch immer ungerade sein, sonst kommen (wegen des
ungeraden Offsets) nur ungerade Würfelergebnisse raus.

 

Deine Version würde zwar auch Zufallszahlen erzeugen, aber mit einer
erheblich schlechteren Streuung weil der seed-Wert nur noch von der
aktuellen Zeit abhängt - Extrembeispiel: dreimal in der gleichen Sekunde
würde dreimal der gleiche "Zufallswert"erzeugt. Deshalb auch das dritte
register $r - um es auf $rnd aufzuaddieren.

Die Befehle $wuerfel%=6 und $wuerfel+=1 sind nur dazu da um die Zufallszahl
zuerst auf 0-5 zu begrenzen und dann um 1 zu erhöhen damit Würfelaugen
herauskommen.

 

Oder als Formel geschrieben:

  $rnd = ($rnd + AktuelleZeitInSekunden modulo 65535) * 25173 + 13849 

  $wuerfel= ($rnd modulo 6) + 1

 

 

Schöne Grüße

 christoph

 

Am 17.09.2018 um 07:59 schrieb Marcel Eilers:

Guten Morgen,

 

auf die Notwendigkeit meine Programmierung auf maximal 8 Befehle in einer
Reihe zu kürzen, habe ich mir den „Pseudo-Zufallsgenerator“ nochmal
angesehen. Irgendwie bin ich da nicht ganz dahinter gestiegen. Aber
interessieren würde es mich trotzdem.

 

Also der Standard Generator lautet:

 

- T($r,65535) $rnd+=$r $rnd*=25173 $rnd+=13849 $wuerfel:=$rnd $wuerfel%=6
$wuerfel+=1

 

Damit habe ich schon 7 Befehle verbraucht. Jetzt noch ein J und ein P Befehl
und der Assembler macht Probleme.

 

Warum werden für diese Funktion 3 Register verwendet?? Man könnte dies auch
so schreiben:

 

- T($wuerfel,65535) $wuerfel*=25173 $wuerfel+=13849 $wuerfel%=6 $wuerfel+=1

 

Dann hätte ich das um 2 Befehle reduziert…

 

Welche Bedeutung haben die Zahlen 25173 und 13849???? Ist das willkürlich?

 

Wäre schön, wenn mir jemand dieser Funktion einfach nur mal erläutern
könnte. Dies einfach nur interessehalber…

 

Vielen Dank für Eure Bemühungen.

 

Schöne Grüße

Marcel

 

 

 





 

-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <https://lists.nomeata.de/pipermail/tiptoi/attachments/20180917/64b74695/attachment.htm>


Mehr Informationen über die Mailingliste tiptoi