Wie kann ein Computer eine zufällige Zahl generieren?

7 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

In der Informatike werden Zufallszahlen durch verschiedene Algorithmen berechnet. Eine häufiger Verwendung sind hierbei rekursive Algorithmen. Dabei werden verschiedene Berechnungen durchgeführt (je nach Verfahren), bei denen die Ergebnisse aus vorigen Berechnungen als Eingabe genutzt werden.

Um es mal anschaulich zu gestalten: Die letzte verarbeitete Zahl im System ist die 3. Diese wird nun als Eingabe für das Berechnen einer Zufallszahl verwendet werden. Wenn die Methode dafür die Eingabe verdoppelt, dann wird die Zufallszahl eine 6. Die nächste wäre die 12. Wäre die letzte Zahl eine 4 gewesen, dann wäre die nächste "Zufallszahl" eine 8, dann 16. (Kein realistisches Beispiel, soll nur anschaulich sein.)

Diese Eingabe ist also der Seed, der den Startwert für die Berechnungen vorgibt. Bei Computeranwendungen nutzt man dafür häufig die Ticks (1 Tick = 100 Nanosekunden) als Seed. Bei deinem Taschenrechner könnten das die Ergebnisse aus deinen vorherigen Berechnungen sein.

ich weiß wie es bei pc's funktioniert ,allerdings nicht wie bei kleineren taschenrechnern:

bei pc's entscheidet die systemzeit.. das ist keine stunden/minuten/sekunden angabe, sondern wesentlich genauer, auf viele kleine kommastellen. sagen wir mal (frei aus der luft gegriffen) 7 kommastellen, dann sagst du dem computer er soll sich von 10 zahlen eine zufällige rauspicken. der computer entscheidet dann nach irgendeiner rechnung: wenn die 7te kommastelle eine "5" ist, soll die zufällige zahl eine "9" sein. wenn die 7te kommastelle eine "1" ist, soll die zufällige zahl eine "2" sein.

streng genommen kann ein computer KEINE zufällige zahlen generieren. es gibt immer einen alghorythmus der dem ganzen zu grunde liegt.

ganz genau kann ich dir das leider auch nicht erklären...

lg


CrystalixXx  04.01.2012, 17:02

Bei Computern entscheidet überhaupt nicht immer die Systemzeit. Das kann der Programmier selbst festlegen, welchen Seed er für die Verfahren angibt.

0
wtobi  04.01.2012, 19:14
@CrystalixXx

angenommen man definiert keinen bestimmten seed, dann werden bei programmen wie z.b. frontpage die systemzeit zur hilfe genommen um zufällige zahlen zu erstellen.

0

Geht an sich recht einfach. Eine schnelle, einfache Variante wäre der Xorshifter: http://de.wikipedia.org/wiki/Xorshift

Das sind recht einfache Rechenoperationen, und müssen halt nur mit einem bestimmten Startwert gefüttert werden. Abhängig dieses Startwertes liefern Sie dann halt ihr Ergebnis. Wobei aber das Ergebnis dann in Anhängigkeit des Startwertes dann sehr gleichmäßig über den gewünschten Zahlenbereich verteilt ist.

Den Startwert könnte man z.B. über die Systemuhr füttern oder einige andere Dinge, die sich während der Laufzeit ändern können. Zusätzlich könnte man den Startwert auch aus einem vorherigen Ergebnis heraus setzen, bzw. also zusätzlichen Startwert einbinden.

Im einfachsten Fall greift man auf einen Timer (Uhr) zurück, der aus einem definierten Zahlenbereich eine Zahl "herauspickt". Hat man eine Uhr, die zehntel, hundertstel etc. Sekunden anzeigt, werden die letzte(n) Stellen genutzt, um eine Zahl aus dem Zahlenbereich anzuzeigen, wenn die Fuktion "Zufallszahl" aufgerufen wird.

Da es niemand schafft, die Funktion im zehntel Sekundentakt oder noch kleineren Intervallen aufzurufen, ist die Zahl zufällig = nicht vorherseh- oder berechenbar.

Wichtig bei den Zufalls-Generatoren ist, dass sie sich bei Start immer wieder gleich verhalten müssen, je nachdem, welche Aufgabe man mit den erzeugten Zufallszahlen machen möchte. Erzeugt man zum Beispiel eine 3D-Animation mit einem 3D-Programm, so wäre es schlecht, wenn sich der Zufall in jedem Bild ändern würde, das gäbe keine anschaubare Videodatei.

Um dies zu bewerkstelligen gibt es immer noch einen sog. Seed-Wert, der im Prinzip den Start-Zustand des Zufallsgenerators festlegt.


CrystalixXx  04.01.2012, 17:04

Ich verstehe den Zusammenhang zwischen dem Erstellen von Zufallszahlen und der Erstellung einer 3D-Animation nicht. Kannst du das bitte näher erklären?

0
Minihawk  04.01.2012, 17:09
@CrystalixXx

Bei 3D-Programmen finden häufig Texturen Anwendung, deren Muster durch Zufallsgeneratoren erstellt werden. Beim Erstellen einer 3D-Animation muss dann gewährleistet werden, dass sich die Textur nicht jedes Bild in eine andere Zufalls-Textur ändert. Daher muss mit einem "nachvollziehbaren" Zufallsgenerator gearbeitet werden.

0
CrystalixXx  04.01.2012, 17:26
@Minihawk

Meines Wissens nach liegen Texturen in Form eines einfachen Bildes so vor. Diese sind an den Rändern so gestaltet, dass ein Wiederholen des gleichen Bildes zu nahtlosen Rändern führt. Die Ausgangsposition wird dabei als Vektor gespeichert und von da ausgehend die Textur immer wieder neu angelegt.

Dass es auf diesen Zufallsprinzipien beruht war mir gar nicht bekannt. Vermutlich gibt es da auch wieder Unterschiede, je nach Anwendung. Danke für die Ergänzung.

0
Minihawk  04.01.2012, 17:30
@CrystalixXx

Es gibt natürlich auch Bild-Texturen, aber für relativ einfache Texturen wie Marmor, Holz-Maserungen, da sind mathematische Texturen recht gut einsetzbar, da man im Programm recht schnell Änderungen am Algorithmus, an der Färbung etc. vornehmen kann.

0