Wie erzeugt Java Zufallszahlen?

... komplette Frage anzeigen

6 Antworten

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

Antwort bewerten Vielen Dank für Deine Bewertung

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.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von clarapfel
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?

0
Kommentar von 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.

0
Kommentar von amdphenomiix6
27.03.2016, 19:13

Da steht, wie die Java-Methode random() funktioniert

0

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.

Antwort bewerten Vielen Dank für Deine Bewertung

Ein Blick in die API hilft:

http://docs.oracle.com/javase/7/docs/api/java/util/Random.html

Dort:

The method next is
implemented by class Random by atomically updating the seed to

(seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1)

and returning

(int)(seed >>> (48 - bits)).
Antwort bewerten Vielen Dank für Deine Bewertung

https://docs.oracle.com/javase/7/docs/api/java/util/Random.html#nextDouble%28%29

Das ist sehr breit dokumentiert. Schau Dir die Funktion next() an.

Es wird gesagt "This is a linear congruential pseudorandom number generator, as
defined by D. H. Lehmer and described by Donald E. Knuth in
The Art of Computer Programming, Volume 3:
Seminumerical Algorithms, section 3.2.1."


Antwort bewerten Vielen Dank für Deine Bewertung

Math.random()

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?