Wie generiert ein Pc zufällige Zahlen?

4 Antworten

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.