[Tiptoi] Pseudo Zufallsgenerator

Jürg Wullschleger wullschleger at gmail.com
Mo Sep 17 13:26:22 CEST 2018


Jetzt hab ich grad gemerkt dass der Zufallsgenerator einen Bug enthaelt,
denn es sollte mod 65536, und nicht mod 65535 gerechnet werden! :-(

Korrekt waere also:

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

Ueberigens koennte ein Befehl gespart werden indem man einfach
"$wuerfel+=1" weglaesst. Der Wuerfel geht dann einfach von 0 bis 5, aber
das geht vermutlich auch, oder nicht?

Juerg

On Mon, Sep 17, 2018 at 11:58 AM Jürg Wullschleger <wullschleger at gmail.com>
wrote:

> Hallo Marcel,
>
> Das Problem ist das die vom T-Befehl gelieferte Zahl relative wenig Zufall
> enthaelt. Es ist einfach ein Counter der hochgezaehlt wird. Wenn man also
> nur diese Zahl verwendet, wird der Wuerfel vielleicht nicht schoen
> gleichverteilten sein. Oder man bekommt Abhaengigkeiten zwischen den
> Zahlen. Vielleicht ist das nicht so schlimm fuer dein Spiel, aber am besten
> versucht man das zu vermeiden.
>
> Deshalb verwenden wir hier einen einfachen Pseudo-Zufallsgenerator, und
> die von T gelieferte Zahl wird nur als "Seed" verwendet, um die Folge
> nicht-deterministisch zu machen.
> Die Zahlen 25173 und 13849 sind zwei Zahlen die sich fuer einen solchen
> Zufallsgenerator besonders gut eignen. Das ist keine Willkuer, die meisten
> andere Zahlenpaare werden viel schlechtere Zufallszahlen generieren.
> Details zu gibts hier (auf englisch):
> https://en.wikipedia.org/wiki/Linear_congruential_generator
> http://users.encs.concordia.ca/home/g/grogono/RNG/grog-gen.html
>
> Gruss
>
> Juerg
>
>
>
> On Mon, Sep 17, 2018 at 7:59 AM Marcel Eilers <marcel.eilers at t-online.de>
> wrote:
>
>> 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
>>
>>
>>
>>
>>
>>
>> --
>> tiptoi mailing list
>> tiptoi at lists.nomeata.de
>> https://lists.nomeata.de/mailman/listinfo/tiptoi
>>
>
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <https://lists.nomeata.de/pipermail/tiptoi/attachments/20180917/0c308d1d/attachment.htm>


Mehr Informationen über die Mailingliste tiptoi