Wie kann man "Zufall" programmieren?

8 Antworten

RND()

Gibt in fast allen Programmiersprachen eine zufallsfunktion - die eine Zufällige Zahl ausspuckt.

Aber - du hast recht: gewöhnliche Computer sind keine richtigen Zufallsgeneratoren - deswegen ist rein theoretisch dieser Zufall berechenbar.

Es gibt auch richtige Zufallsgeneratoren die basieren auf komplexen physikalischen Aufbauten.

Völlig richtig erkannt, Zufall lässt sich gar nicht programmieren!

Im Computer verwendet man nur Pseudozufallszahlen, die man auf der Grundlage von gewissen Zahlenfolgen erzeugt, die möglichst vielen statistischen Zufallstests genügen. Allerdings ist nichts daran "zufällig" - fängt man mit den selben Startwerten an, dann kommt immer die selbe Zahlenfolge raus.

Ein einfaches Beispiel für einen Pseudozufallszahlengenerator ist z.B., wenn man eine beliebige Zahl > 1 als Startwert nimmt, sie mit sich selbst multipliziert, und jeweils nur die mittleren zwei (oder n) Ziffern als nächste Zahl nimmt. Diese ist dann eine weitere "Zufalls"zahl und die Eingabe für die nächste Runde.

"Randomize" heißt das Zauberwort.

Oder... Man nimmt ein Festes Datum. Zum Beispiel 01.01.1970, 00:00Uhr und lässt errechnen wieviele Sekunden von diesem Zeitpunkt bis zum jetzigen zeitpunkt vergangen sind und subrahiert von dieser Zahl dann abwechseln 2 dann 4 dann 6 dann 8 dann 10 dann 3 dann 6 dann 9 dann 12 dann 4 dann 8 dann 12 dann 14 dann 2 dann 4 dann 6 dann 8 dann 10 und so weiter bis man in einen Zahlenbereich kommt, indem man eine zufällige Zahl auswählen möchte. ^^ Das war nun nur vereinfacht dargestellt. Es gibt natürlich noch hunderte andere möglichkeiten einen zufälligen Wert zu erzeugen.


subn0de  28.12.2010, 23:03

Hast Du ein Beispiel, welcher Algorithmus die Unixzeit implementiert? Das wäre super..

Wirkliche Zufallszahlen erhältst Du auf "www dot random dot org".

In der Praxis wird meist die Lineare Kongruenzmethode verwendet, denn diese Zahlen verhalten sich in den meisten Anwendungen wie Zufallszahlen; sie sind zwar berechnet und daher niemals zufällig. Dabei werden zum Starten der Zufallssequenz meist "zufällige" Maßeinheiten des Betriebssystems genommen: Millisekundenanteil, Temperatur, Füllung der HD und dergleichen.

Die Startzahl (auch seed genannt) ist im folgenden Link mit "x null" (x Index 0) bezeichnet:

http://www.programmieraufgaben.ch/aufgabe/lineare-kongruenzmethode/qqrcbps2

absolut korrekt, zufall lässt sich nicht programmiern. Es gibt allerdings verschiedene Algorithmen die Pseudozufallszahlen generieren. Manchmal werden sogar spannungs- oder Temperaturschwankungen der CPU gemessen und daraus eine Zufallszahl generiert