Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi WELL 1024a Zufallszahlengenerator (https://www.delphipraxis.net/175061-well-1024a-zufallszahlengenerator.html)

sx2008 28. Mai 2013 15:10

WELL 1024a Zufallszahlengenerator
 
Liste der Anhänge anzeigen (Anzahl: 1)
Der WELL 1024a (Pseudo-)Zufallszahlengenerator hat eine Periodenlänge von fast 2^1024 (~ 10^308) und liefert ziemlich gleichverteilte Zufallszahlen.
Der Zufallszahlengenerator von Delphi hat dagegen nur eine Periodenlänge von 2^32.

Ich habe den Zufallsgenerator als Klasse implementiert, damit man mehrere Generatoren parallel betreiben kann.
Der Generator produziert entweder unsigned Integer (Cardinal) oder Fliesskommazahlen zwischen 0 und 1.

Furtbichler 28. Mai 2013 19:05

AW: WELL 1024a Zufallszahlengenerator
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ein Mersenne-Twister mit einer Periodenlänge von 2^219937-1. Ich habe diesen Code auch nur von irgendwoher kopiert. Wie kommen die nur auf solche Periodenlängen? Wie sieht die Performance beider PRNG aus?

sx2008 29. Mai 2013 14:07

AW: WELL 1024a Zufallszahlengenerator
 
Zitat:

Zitat von Furtbichler (Beitrag 1216763)
Wie kommen die nur auf solche Periodenlängen?

Das hängt von der Grösse der inneren Zustands ab.
Bei Well1024a ist das
Delphi-Quellcode:
STATE : array[0..32-1] of Cardinal
; 32 * sizeof(Cardinal) * 8 = 1024 Bit.
Allerdings werden nicht alle Zustände durchlaufen (insbesondere Zustand 0) daher kommt die -1.

Beim Mersenne-Twister sind es 624 * sizeof(Integer) * 8 = 19968 Bit wobei wohl ein Bit nicht genutzt werden kann und dann halt "nur" 2^219937-1 Zustände bleiben.

Der Vorteil des Well gegenüber Mersenne-Twister ist, das der Well-Generator schon nach ~ 100 Schritten "eingelaufen" ist, während Mersenne-Twister dazu ~ 70000 Schritte braucht.

"Einlaufen" heisst, man muss entsprechend viele Zufallszahlen abrufen und wegwerfen, bevor man mit guten gleichverteilten Zahlen rechnen kann.

Zitat:

Zitat von Furtbichler (Beitrag 1216763)
Wie sieht die Performance beider PRNG aus?

Hab's nicht gemessen, aber der Well1024 dürfte etwas schneller sein weil er keine for-Schleifen enthält.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz