Wie erzeugt Java Zufallszahlen?

6 Antworten

Eine Anmerkung dazu am Rande: Echte Zufallszahlen können nicht durch einen Algorithmus erzeugt werden, nur durch einen Prozess, der dem Zufall folgt. Das können z.B. voneinander unabhängige Vorgänge sein, die miteinander verknüpft nicht vorhersagbare Ergebnisse liefern. Deshalb ist es sehr schwierig, solche mittels Computer zu generieren. Nur einzeln per Tastendruck geht das unproblematisch im begrenzten Zahlenbereich. Für den praktischen Gebrauch kann man aber Pseudozufallszahlen nehmen, da es meistens ausreicht, wenn diese der Normalverteilung unterliegen. Solche kann man durch geeignete Algorithmen erzeugen. Das wird etwa bei einschlägigen Taschenrechnern gemacht.

In den 70ger Jahren hat man sich in den IBM-Labors mal mit einem Verfahren beschäftigt, echte Zufallszahlen aus dem atmosphärischen Rauschen zu gewinnen (habe das damals irgendwo gelesen). Ob das jemals zu praktischen Anwendungen geführt hat, weiß ich leider nicht.

Also es gibt in Java erst mal 2 Mir bekannte Standard Möglichkeiten Zufallszahlen zu erzeugen.

1. Über die Math.random() Methode

2. Mithilfe der Random Klasse

Ich weiß nicht genau welcher Algorithmus da genutzt wird, aber das sind erstmal die mir bekannten, in der JDK mitgelieferten Methoden.

Dann gibt es sicherlich auch noch eine ganze Reihe Libraries mit denen man Zufallszahlen auf verschiedenste Weise erzeugen kann. Ich will damit nur sagen es gibt in Java nicht "die" Umsetzung für Zufallszahlen sondern meherere

Meistens werden so genannte "Pseudozufallszahlen" erzeugt. Dies kann zum Beispiel durch bestimmt Algorithmen geschehen, wie Restklassenrechnung. Meistens wird irgendein nicht zufälliger Startwert, wie zum Beispiel die Sytemzeit genommen. Um wirklich zufällige Zahlen zu erhalten, muss auch ein zufälliges Ereignis, wie etwa der Zerfall eines Isotops vorliegen.


amdphenomiix6  27.03.2016, 19:02

Ich weiß nicht, wie die Random-Methode in Java implementiert ist, das kann man aber sicher nachschauen. Nun, das einzige, was es bei Zufallszahlen wirkich zu beachten gibt, ist die Normalverteilung. Diese werden durch bestimmte Algorithmen sicher gestellt. Jedoch brauchen diese auch einen zufälligen Startwert, um zu arbeiten. Dies kann zum Beispiel die Systemzeit sein. Wie genau diese Algrithmen im Detail arbeiten, ist unterschiedlich und kann in Wikipedia nachgelesen werden, bzw. in Fachliteratur zitiert.

clarapfel 
Beitragsersteller
 27.03.2016, 19:06
@amdphenomiix6

Ich hatte im Netz schon geschaut, aber es wird einem nie gesagt, wie die Algorithmen in Java funktionieren, sondern nur, wie man sie anwendet. Aber vielen Dank, jetzt habe ich zumindest schonmal einen weiteren Anhaltspunkt zum Suchen

clarapfel 
Beitragsersteller
 27.03.2016, 18:59

Danke :) Also gibt es keinen Algorithmus, der bei Java immer genommen wird? Und weißt du, wie das mit der Systemzeit genau funktioniert?