Wie generiert ein Pc zufällige Zahlen?
Wenn ich nun in C++ die Funktion benutze, um zufällige Zahlen zu generieren, wo kommen diese dann her? Einen Zufall kennt der Pc doch garnicht?
4 Antworten
Und wenn einem die Pseudozufallszahlen nicht zufällig genug sind, nimmt man Lavalampen, um echte Zufallszahlen zu bekommen:
Die c rand() Funktion nutzt "pseudo zufällige" Prozesse, bei denen der Seed (Ursprungswert) aus dem kommt, was der PC so weiß (z. B. Zeit, Betriebszustand der CPU, Temperatur). Das ist bei jeder Implementation von dieser Funktion (glibc, musl, MSVCRT) anders. Es gibt aber auch andere Quellen, auf die du zurückgreifen kannst:
z. B. solche, die mehrere Quellen antasten und gut genug für kryptografische Zwecke sind, sowie solche, die tatsächlich Messungen nutzen, um Entropie aus der Umgebung zu bekommen.
Hier ein Dokument von Intel, was dies näher beschreibt: https://www.intel.com/content/dam/develop/external/us/en/documents/441-intel-r-drng-software-implementation-guide-final-aug7.pdf. Hier etwas kompakter von AMD: https://www.amd.com/content/dam/amd/en/documents/pdfs/developer/aocl/amd-secure-random-number-generator-library-2.0-whitepaper.pdf
Das geht dann via "Intrinsics" oder inline-assembly.
Das, was du zufall nennst ist oft nur pseudozufall. Von einem Startpunkt aus sind die ermittelten zahlen durchaus determiniert, also errechrnbar. Das geht z.b. so, das 2 zahlen multipliziert werden vom Ergebnis aber Ziffern aus der Mitte zur weitern Berechnung benutzt werden. Da kommt schon ein kräftiges Durcheinander raus.
Wählt man als Startpunkt keine feste Zahl, sondern das Erstellungsdatum irgendeiner Datei im PC , dann wird es schon kompliziert das nachzuverfolgen.
Andere benutzen z.b. eine Mausposition .....
Einen Zufall kennt der Pc doch garnicht?
... deswegen werden die von einem PC programmtechnisch erzeugten Zufallszahlen auch "Pseudozufallszahlen" genannt.