(Informatik) Kann der Computer zufällig entscheiden?

13 Antworten

Zufallszahlengenerator auf deinem Rechner sind immer sogenannte Pseudozufallszahlengeneratoren, eben weil sie nicht richtig zufällig sind, sondern nach einem bestimmten Verfahren berechnet werden. In der Praxis nutzt man dann einen sog. "Seed" (meist einfach der aktuelle Zeitstempel) um das ganze etwas durchzuwürfeln, aber trotzdem gilt: Kennst du den verwendeten Seed und den Algorithmus, kannst du die Zufallszahlen beliebig rekonstruieren - sie waren also nicht echt zufällig.

Um echten Zufall zu erzeugen, müsste man irgendeine physkalische Größe mit einbringen, z.B. radiokativen Zerfall oder ähnliches

Für echten Zufall braucht es immer extra Hardware (extra Schaltungen), die (meistens) thermisches Rauschen ausliest.

Moderne CPUs haben das oft integriert auf dem Chip. Aber es ist ein Extra-Device mit Extra-Instruktionen, zusätzlich zum üblichen Rechenwerk.

Übrigens ist es z.B. für die Softwareentwicklung und für Leistungsvergleiche sehr wichtig, dass man nur Pseudozufallszahlen verwendet, damit der Programmablauf bei Tests und Messungen reproduzierbar ist.

0

bei jedem aufgetretenen Ereignis kann man (solange die Spuren nicht verwischt sind) zurückverfolgen, warum das so und nicht anders eingetreten ist. Zufall gilt also nur für die Zukunft. Wenn man vorausberechnen kann, ob ein Ereignis eintritt, dann ist das kein zufälliges Ereignis. Wenn ein Computer eine Zahl (dein Beispiele ) zwischen 0 und 500 generieren soll, dann muss er nur den Zeitpunkt des Programm-Starts als Anfangsbedingung benutzen und der Beobachter ist nicht in der Lage, diese Zahl vorherzusagen.

Anders ist es mit der Folgezahl, deren Anfangszustand die 1. Zahl ist. Hierfür werden tatsächlich Algorithmen benutzt. Dabei ist aber oft nicht die "Unvorhersagbarkeit" das Ziel sondern die Verteilungskurve. Bei einer "Gleichverteilung" sollen nach einer genügend großen Gesamtzahl von Zahlen alle Einzel-Zahlen genauso häufig aufgetreten sein. Bei einer Gaußschen-Verteilung soll der Schwerpunkt in der Mitte liegen , die 0 und die 500 werden dann u.U. überhaupt nicht auftreten ... .

Zum Verschlüsseln sind Programme, die solche Zahlen liefern, wenig verwendbar. Aber schon die Impulse, die bei der Mausbewegung entstehen, sind, da die gleiche Person niemals völlig gleiche Bewegungen ausführen kann, zufällig also nicht berechenbar. Auch wenn diese Werte im Computer gespeichert sind, sie aber niemand kennt, sind das Zufallswerte.

Ein Computer kann keine echten Zufallszahlen erzeugen, dazu fehlt die Hardware und die echte Zufallszahlenerzeugung hat auch Nachteile - sie ist aufwändig, abhängig von der Umgebung und die Verteilung der Zufallszahlen kann immer erst im Nachhinein festgestellt werden. Der Computer bedient sich deswegen sogenannten Pseudozufallszahlenalgorithmen, die möglichst lange Reihen gleichverteilter Zufallszahlen zu erzeugen. Ein Beispiel dafür wäre die Kongruenzmethode, welche nach der Formel

x_n+1 = (a * x_n + b) mod c 

arbeitet. a,b und c sind große konstante Zahlen, mod ist der ganzzahlige Divisionsrest und als x_ 0 wird beispielsweise die aktuelle Zeit des Computers genutzt. Die x_ n-Werte sind dann Zufallszahlen. Es gibt auch Methoden, um echte Zufallszahlen zu erzeugen, http://www.random.org/ wäre ein Beispiel dafür, die generieren ihre Zufallszahlen durch irgendein kosmisches Rauschen.

Irgendwann kommt dabei eine Konstante heraus, probier es einfach aus!

0
@gh7401

probier es einfach aus!

Hab ich, mein C++-Testprogramm ist unten. Man kommt da nie auf eine Konstante, weil sich (bei den kleinen Werten für a,b und c) die Reihe 3,6,7,2 immer wiederholt. Und genau deswegen nimmt man für die Konstanten große Zahlen, damit es eine Weile dauert, bis sich die Periode wiederholt. Dass sie sich überhaupt wiederholt, ist ein Nachteil aller Pseudozufallszahlenalgorithmen. Hier kannst du u.a. nachlesen, wie C unter UNIX Zufallszahlen generiert http://cplus.kompf.de/artikel/random.html

#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
 const int a = 3;
 const int b = 5;
 const int c = 8;

  int xn=2;

  while(1)
  {
    xn = (a * xn + b) % c;
    cout<<xn<<endl;
  }
  return 0;
}
0

Java / GUI Problem?

Hallo zusammen. Ich mache gerade meine Präsentationsprüfung und muss ein Programm programmieren in Java, mit GUI. Ich habe eine Array-list erstellt mit Zahlen, die aber in Strings gespeichert sind. (Programm tu ich unten dazu). Jetzt möchte ich, dass der Computer diese Strings ausrechnet und mit der von Hand eingegebenen Zahl vergleicht und je nach dem, dass das Feld Grpn oder Rot wird. Es wird aber nur rot, auch wenn ich das richte eingebe. Kann mir jemand helfen? wär super wichtig.

Hier noch das Programm bzw. der Teil und meine Array-liste:

ArrayList<String> fragen = new ArrayList<>();
   fragen.add("146");
   fragen.add("138");
   fragen.add("1112");
   fragen.add("194");
   fragen.add("916");
   fragen.add("1217");
   fragen.add("167");

String frage;
   int antwort;
   frage = tf_frage.getText();
   antwort = Integer.parseInt(tf_antwort.getText());  

   if (frage == "164" && antwort == 84) {
     tf_antwort.setBackground(Color.green);
   } // end of if
   else {
     tf_antwort.setBackground(Color.red);
   } // end of if-else
...zur Frage

Was bedeutet n in den chemischen Formeln?

Was bedeutet das kleine n in der Summenformel der Chemie. Also zum Beispiel CnH2n+2. Bedeutet es eine konkrete Zahl, dann könnte man sie ja auch hinschreiben.

Helmut Schiestl ####

...zur Frage

Der "Betrag der Zahl"

Hallo Freunde,

folgende Frage kam mir spontan auf, als ich heute mal wieder im Mathe-Buch gewühlt habe.

Dort steht: "Soll das Vorzeichen einer Zahl nicht mit in Betracht gezogen werden, so schreibt man die Zahl in senkrechte Striche."

Also als Beispiel: |-3| = 3

Allgemein formuliert: |-x| = |+x|

ABER! ... warum, wenn das Vorzeichen hier keine Rolle spielt, lässt man es nicht einfach weeheeeeg?! :D

Man schreib (umständlicher weise): |-12| - |-10| + |-8|

Warum nicht gleich einfach: 12 - 10 + 8

Also die Frage: Welchen Sinn soll das haben, dieses "|" jeweils vor und hinter der Zahl zu setzten?

Danke für die Antwort und mit freundlichen Grüßen,

der David :)

...zur Frage

Weiss einer wo die Miezburg ist?

Ich glaube das können nur Hannoverraner wissen, und zwar bin ich auf der Suche nach Lost Places in Hannover, ich habe einige Bilder der Miezburg gesehen und Videos und sonst alles gesehen, aber keine konkrete Antwort gehört wo die überhaupt ist. Weiss es jemand zufällig? Ich bitte um eine schnelle Antwort.

...zur Frage

Frage zu Java Rekursion (Dezimalzahl in das übergebene Zahlensystem umwandeln)?

Aaalso kann mir jemand helfen, wie diese Java Programmieraufgabe geht? Habe schon des öfteren mit rekursiven Methoden gearbeitet, jedoch habe ich keinen Ansatz wie ich das hier anstellen soll:

Schreiben Sie eine Methode int gibDarstellung(int zahl, int basis) die ohne Schleifen eine dezimale Zahl in die übergebene Basis umrechnet. Beispiel: (15, 2) wird zu 1111 (also wird quasi 15 in binär zurück gegeben.

Dahinter stand noch in klammern Horner-Schema.

Habe die Aufgabe aus einer Klausurrekonstruktion von einem anderen Studenten, könnte also sein, dass die Aufgabe in "echt" auch ein bisschen anders aussah.

...zur Frage

Kann ein Stern auch unter dem Schwarzschildradius mit Hilfe von fremeder Materie zu einem schwarzen Loch werden?

Wenn jetzt z.B unsere Sonne stirbt und wie nachgewiesen nicht genug Masse besitzt trotzdem durch den Einfluss von fremder Materie zu einer Singularität kollabieren ? Evtl. zum Beispiel durch umliegende Planeten oder andere große Objekte die in der Explosions des sterbenden Sterns ? Würde mich sehr über eure Antwort freuen. MFG David ^^

...zur Frage

Was möchtest Du wissen?