Wie sagt man dem Computer, dass er etwas Zufälliges machen soll?

7 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Oft werden lineare Kongruenzen verwendet - Diese 'streuen' quasi die Werte systematisch über den Wertebereich. Kenne ich den Startwert und die Parameter sind diese Pseudozufallszahlen komplett vorhersagbar.

Also muß der Startwert möglichst zufällig sein. Zeitstempel haben der Vorteil, daß sie veränderlich sind, die Zahlenfolge wäre aber immernoch vorhersagbar, wenn man den genauen Startzeitpunkt kennt. Für die meisten Fälle reicht das aber aus.

Neben Zeitstempeln gibt es natürlich noch diverse andere Möglichkeiten, zumindest auf Betriebssystemseiten - da wären z.B. die Ankunftszeiten von Netzwerkpaketen, oder von Interrupts von Eingabegeräten eine Quelle.

Oder man greift auf irgendwelche Speicheradressen zu und nutzt den dort vorliegenden Inhalt - was eben gerade drin rumsteht. Das ist meist auch schlecht vorhersagbar.

Will man es noch besser, dann braucht es HW gestützte Lösungen.

Neben LCGs gibt es natürlich diverse weitere Generatoren, z.B. den Mersenen Twister, der mathematisch anders aufgebaut ist.

Etwas mehr Infos zu den Generatoren findest DU hier:

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

Der berechnet die random funktion und macht dann das eine oder das andere.

Per random() vom Programm erzeugte Zufallszahlen sind nur Pseudozufallszahlen.

Mit anderen Worten: Es könnten immer dieselben sein, wenn du das Programm mehrfach laufen lässt.

Du kannst aber erzwingen, dass es nicht stets die gleichen sind, indem du die "Saat" — welche man per srand() setzt — zeitabhängig machst. Lies mehr dazu in Antwort https://www.gutefrage.net/frage/was-muss-ich-in-der-main-funktion-aendern-um-verschiedene-zufallszahlen-auszugebenc#answer-170633434 .

Gurkenhaft  23.05.2020, 16:21

Das beantwortet seine Frage 0.

1

Im einfachsten Fall wird dabei ein Zeitstempel genommen (z.B. die Anzahl der Millisekunden seit 00:00:00 am 01.01.1970) und mit ein paar anderen Werten verrechnet.

Es gibt allerdings auch komplexere Methoden, bei denen z.B. der Betriebssystemkern Entropie in Form von Störrauschen u.ä. sammelt und diese über eine geeignete Schnittstelle dem jeweiligen Anwendungsprogramm zur Verfügung stellt.

Und noch einige weitere...

P.S.: Die Zeitstempelmethode ist für so ziemlich alles, was nicht mit Kryptographie und speziellen mathematischen Simulationen zusammenhängt völlig ausreichend.