Ziggurat Algorithmus in Java

Die Normalverteilung ist die bedeutendste Verteilung. Normalverteilte Zufallszahlen finden in stochastischen Modellen und Simulationen häufig Verwendung. Daher ist es für eine performante Simulationssoftware unerlässlich diese hochgradig performant ziehen zu können.

Die Standardmethode in jave.util.Random ist jedoch nicht auf Performance ausgelegt. Sehr viel besser ist der Ziggurat Algorithmus von  George Marsaglia und Wai Wan Tsang aus dem Jahr 2000.

Da ich keine Implementierung in Java gefunden habe, habe ich selbst eine aus c portiert.

In der unten stehenden Tabelle habe ich die Zeiten für das Ziehen von 1.000.000.000 Zufallszahlen zwischen der Standard Implementierung in java6 und dem Ziggurat Algorithmus verglichen. Danach ist Ziggurat acht mal schneller als java6.

Methode Zeit java6 / ms Zeit Ziggurat / ms rel. Performance
nextInt() 27256 3683 13.5%
nextDouble() 51515 3876 7.5%
nextGaussian() 149905 18562 12,3%

Die Richtigkeit der Java Implementierung wurde durch einen Vergleich mit der Zufallszahlenfolge der c Implementierung nachgewiesen.

Den Quellcode der Ziggurat Klasse findet man hier.

Dieser Beitrag wurde unter Allgemein abgelegt und mit , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>