Wie generiert ein Computer Zufallszahlen?

... komplette Frage anzeigen

7 Antworten

Da dir ja schon viele Leute geschrieben haben, dass ein Computer keine echten Zufallszahlen erzeugen kann, möchte ich nochmal darauf hinweisen, dass das nicht (mehr) stimmt, denn seit ein paar Jahren verfügen so ziemlich alle x86 CPUs über den RDRAND (und entfernt auch RDSEED) Befehl, der tatsächlich echte Zufallszahlen aus thermischem Rauschen erzeugt.

Das gleiche gilt für alle modernen Rechner der letzten Jahre, von denen die meisten ein TPM-Modul auf dem Mainboard haben. Eine der Hauptfunktionen von so einem TPM-Modul ist die Erzeugung echter Zufallszahlen mithilfe eines Hardware-Zufallszahlen-Generators.

Sowohl RDRAND als auch TPM sind beide - meiner Meinung nach nicht ohne Grund - umstritten, aber das ist ein anderes Thema.

Fakt ist, dass moderne Rechner sehr wohl in der Lage sind, echte Zufallszahlen zu erzeugen, ohne auf ein externes Hardware-Modul angewiesen zu sein.

Pseudo-Zufallszahlen lassen sich in sehr hoher Qualität leicht z. B. mit dem Mersenne Twister Algorithmus erzeugen. Eine ebenfalls sehr hohe Qualität erreicht man mit meistens sehr schnellen XOR-Shift-Algorithmen.

Siehe dazu Wikipedia:

https://de.wikipedia.org/wiki/Xorshift

Ich persönlich bin ein absoluter Fan von Xorshift. Die damit generierten Zahlen übertreffen sogar teilweise den Mersenne Twister, und sind dennoch viel "billiger" zu haben. :)

Einfach mal die dieharder-Testsuite drüber laufen lassen, und die Ausgabe bewundern. ;)

Antwort bewerten Vielen Dank für Deine Bewertung

Ein Computer kann schlicht und einfach keine Zufallszahlen erzeugen.
Das, was durch einen Random-Befehl erzeugt wird, sind Pseudo-Zufallszahlen.
Diese werden, wie du auch schon gesagt hast, aus veränderlichen Attributen wie beispielsweise der Uhrzeit bzw. des Timestamps erzeugt.
Zufällig sind sie nicht, sie könnten theoretisch berechnet werden.
Ich hoffe, ich könnte dir helfen.
LG Willibergi

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von PWolff
22.03.2016, 12:35

Für die meisten Anwendungen ist entscheidend, dass sich die Pseudozufallszahlen statistisch ebenso wie echte Zufallszahlen verhalten.

Für die Kryptographie reicht es, wenn sie sich im großen und ganzen wie echte Zufallszahlen verhalten, hier ist wichtiger, dass auch aus einer langen Kette von Pseudozufallszahlen nicht mit signifikant erhöhter Wahrscheinlichkeit vorhersagbar ist, welche Zahlen als nächste kommen.

1

Computer erzeugen Pseudozufallszahlen. Dafür gibt es Algorithmen, die zwar kein bisschen zufällig sind, aber deren "Zufallszahlen" möglichst zufällig aussehen.

Ein simples Beispiel: Wähle (irgendeine) zweistellige Zahl als Anfangswert ("seed"). Quadriere sie (dadurch wird sie bis zu vierstellig). Nimm nun die beiden mittleren Ziffern als erste Zufallszahl (und als neuen seed).

https://de.wikipedia.org/wiki/Mittquadratmethode

Wie man sieht ist die hier resultierende Zahlenfolge kein bisschen zufällig. Zudem muss sie sich nach soundsoviel Durchläufen wiederholen (sobald man einen Seed zum zweiten mal erhält hat man einen Zyklus).

Nach diesen Rahmenbedingungen funktionieren ausnahmslos alle Pseudozufallszahlengeneratoren. Sie verwenden nur längere Zahlen und eine bessere "Durchmischfunktion".

Damit man nicht immer die gleiche Zufallsfolge erhält wird der Seed z.B. mittels der aktuellen Uhrzeit initialisiert. Auch andere, möglichst nichtdeterministische Systemzustände (Tastendrücke, Festplattenzugriffe, Netzwerkaktivität, usw.) werden in den Seed aufgenommen. Zu guter Letzt wird auch während der Generierung immer mal etwas "Zufälligkeit" aus solchen Quellen in die Folgenerzeugeung eingespeist - so verhindert man vorhersehbare Zyklen.

Und dann gibt es natürlich auch noch Zufalls-Hardware, die etwa durch Diodenrauschen "echte" (physikalische) Zufallsbits erzeugen kann.

Antwort bewerten Vielen Dank für Deine Bewertung

Ich denke da hat jede Programmiersprache ihre eigenen Algorithmen. Sicherlich wird die Uhrzeit in Millisekunden ein Faktor sein, allerdings wenn man den Zufallsgenerator nicht mit etwas wie Randominze initialisiert, liefert er immer gleiche Zufallsfolgen, was nützlich in einem Spiel sein könnte wo das Level jedesmal gleich erstellt wird zB.


hier noch ein Wikipedialink: https://de.wikipedia.org/wiki/Zufallszahlengenerator



Antwort bewerten Vielen Dank für Deine Bewertung

Richtig er bezieht sich auf etwas veränderliches.

Z.b. Die Uhrzeit in Milisekunden die momentane Prozessor auslastung u.s.w.

Es ist also kein 100% tiger zufall aber durch viele verschiedene Variabeln trotzdem nicht möglich es vorrauszusehen da die gleiche Situation kein zweites mal vorkommt

Antwort bewerten Vielen Dank für Deine Bewertung

er hat einen Algorithmus ^^ zumindest der RNG der PS2, den ich kenne. Hier wird bei einem spiel immer wieder neue Random Numbers generiert.

Z.b. bei FF12. Bei dem Spiel hat ALLES einen Wert. Wenn eines der hunderten von Monstern dich hittet verändert das die zahl (bei jedem Monster unterschiedlich), wenn dein Team mate dich hittet, wenn du dich selbst hittest, wenn du Ausrüstung änderst, wenn du einen Gegenstand aufhebst, wenn du einen Spell wirkst, etc..... das Heißt, dass es schwer ist den RNG vorherzusehen, aber definitiv möglich^^ Man muss nur wissen welche Aktionen den internen Wert wie verändern =)

Antwort bewerten Vielen Dank für Deine Bewertung

Ganz ausführlich erklärt ist das in Band 2, Kapitel 3 des Buches The Art of Computer Programming von Donald E. Knuth.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?