Wie könnte ein Computer -richtige- Zufallszahlen erzeugen?
-
1.) Die meisten Prozessoren haben ein echtes Zufallsdevice.
2.) Schliesse eine digitale Camera an und miss das thermische Rauschen. Gab mal einen Artikel in der c't.int zufall(int seed) { return (wuerfeln(void) * seed); }
Wozu brauchst du hier einen seed?
-
Oder auch so.
-
knivil schrieb:
1.) Die meisten Prozessoren haben ein echtes Zufallsdevice.
2.) Schliesse eine digitale Camera an und miss das thermische Rauschen. Gab mal einen Artikel in der c't.Ja, aber das ist alles spezielle Hardware.
"echtes Zufallsdevice", das ist wahrscheinlich auch irgendso ein asynchroner Stromkreis, was? Das ist im Prinzip das gleiche.
Ich glaube aber nicht, dass rand() aus der stdlib sowas benutzt.
-
cooky451 schrieb:
Oder auch so.
Jaein. In meinem Beispiel wird immer neu gewürfelt, so werden inteterministische Werte erzeugt.
Im Grunde wird doch das hier besprochen, was ich mir schon erschlossen hatte: man braucht ein inteterministisches Medium, um echte Zufallszahlen zu erzeugen.
-
Ich glaube
Ach darum geht es ...
man braucht ein inteterministisches Medium, um echte Zufallszahlen zu erzeugen
Das ist ja mal die Erkenntnis schlechthin.
-
knivil schrieb:
int zufall(int seed) { return (wuerfeln(void) * seed); }
Wozu brauchst du hier einen seed?
Stimmt auch wieder.
Verbesserte Version:
int zufall(int AnzahlDerWuerfelseiten) { return (wuerfeln(AnzahlDerWuerfelseiten)); }
-
knivil schrieb:
Das ist ja mal die Erkenntnis schlechthin.
Ja. Die leute von der c-stdlib haben das anscheinend nicht erkannt.
-
Sie schreiben dir nicht vor, welchen seed du benutzt und wie er gewonnen wird.
Ja. Die leute von der c-stdlib haben das anscheinend nicht erkannt.
Und du hast nicht erkannt, warum die Dinge so sind, wie sie sind.
-
knivil schrieb:
Sie schreiben dir nicht vor, welchen seed du benutzt und wie er gewonnen wird.
Ja. Die leute von der c-stdlib haben das anscheinend nicht erkannt.
Und du hast nicht erkannt, warum die Dinge so sind, wie sie sind.
Naja, ich muss es irgendwie schaffen, einen halbwegs ordentlichen seed zur laufzeit zu erzeugen.
entweder der seed, oder der algorithmus muss indeterministisch sein.
für den seed kämen also nur so triviale sachen wie uhrzeit, anzahl der laufenden prozesse, mausbewegungen usw. infrage.
Warum sind denn die Dinge so wie sie sind?
Richtig, weil ein Computer ohne Extra-Hardware keine ordentlichen Seeds erzeugen kann.
Ergo: Computer können ohne spezielle Hardware keine Zufallszahlen erzeugen.
Ergo: die vermutung meines eingangsposts ist im kern richtig.
-
Lustig, dass SeppJs "Fakten" sich über drei Seiten gehalten haben.
-
srand schrieb:
Warum sind denn die Dinge so wie sie sind?
Richtig, weil ein Computer ohne Extra-Hardware keine ordentlichen Seeds erzeugen kann.
Ergo: Computer können ohne spezielle Hardware keine Zufallszahlen erzeugen.
Ergo: die vermutung meines eingangsposts ist im kern richtig.du willst es auch nicht wahrhaben, dass man keine extra-hardware heutzutage mehr braucht, oder ? hier noch ein link, extra für dich http://spectrum.ieee.org/computing/hardware/behind-intels-new-randomnumber-generator/0 sogar mit geschichte
wenn du sogar im besitz eines neueren intel prozessors sein solltest, kannst du es ja sogar benutzen, so, wie es hier beschrieben wird http://software.intel.com/sites/default/files/m/f/f/4/7/7/37157-BullMountainGuide-20110619.pdf
-
Ergo: die vermutung meines eingangsposts ist im kern richtig.
Also du meinst beispielsweise diese hier?
Um richtige Zufallszahlen zu erzeugen, braucht man genügend Kausalität.
Aber auf deinen Eingangspost genauer einzugehen:
Beispielsweise könnte man viele kleine Kügelchen, die alle einen bestimmten Wert haben, nach dem "Lotto-Prinzip" ziehen.
Was haltet ihr davon?
Nix! Angenommen ich habe ein Device D was unabhaengig und gleichverteilt mir Zufallszahlen aus {1,2,3} liefert. Ich kann D leider nicht benutzen, um auch unabhaengige Zufallszahlen aus {1,2,3,4,5} zu ziehen, ohne Ziehungen zu wiederholen. D.h. es ist wahrscheinlich nicht performant.
-
knivil schrieb:
Ergo: die vermutung meines eingangsposts ist im kern richtig.
Also du meinst beispielsweise diese hier?
Um richtige Zufallszahlen zu erzeugen, braucht man genügend Kausalität.
Nein. Meine Kernvermutung war, dass man spezielle Hardware braucht, um richtige Zufallszahlen zu erzeugen.
Und? Dann hab ich halt diese Begriffe falsch verwendet. Du bist doch nicht so kleinkariert, oder?
-
Also deine Vermutung war, dass eine Turingmaschine nur Dinge berechnen kann? Wahnsinn, wer hätte das gedacht.
-
cooky451 schrieb:
Also deine Vermutung war, dass eine Turingmaschine nur Dinge berechnen kann? Wahnsinn, wer hätte das gedacht.
Von der Turingmaschine hab ich nix gesagt.
P.s.: Komisch, ich hab doch im Firefox "Cookies ablehnen" eingestellt
-
Nun, die CPU ist so das deterministische was ich kenne, anderfalls waere ihr Nutzen auch sehr beschraenkt. Waehrend Turingmaschine eine etwas theoretische Rechenmaschine ist, so ist die praktische Umsetzung in Form von CPU + RAM zu finden.
-
Schließe einfach ein Geigermüllerzählrohr an den Computer an, dann hat du einen echten Zufallsgenerator.
-
oder Rauschgenerator
-
großbuchstaben schrieb:
oder Rauschgenerator
gibts ja schon unter linux (/dev/random)
-
/dev/random schrieb:
großbuchstaben schrieb:
oder Rauschgenerator
gibts ja schon unter linux (/dev/random)
/dev/random ist kein Rauschgenerator, das sammelt bloß Entropie aus verschiedenen Quellen, die jedoch in der Regel keine speziellen Hardwarezufallsgeneratoren sind (weil diese erst recht neu sind). Laut Manpage gehören zu den Hauptquellen der zeitliche Abstand zwischen Tastaturereignissen und die zeitliche Abfolge von Interrupts. Daher kann /dev/random nicht als Dauerquelle großer Mengen echter Zufallszahlen dienen, da es eben eine Weile dauert, bis sich genügend Entropie angesammelt hat.
Klassischer Test:
cat /dev/random
Das leert den gegenwärtigen Pool und wartet dann auf neue Ereignisse. Bewegt man die Maus oder tippt ein bisschen auf der Tastatur, so bekommt man nach einer Weile einen Schub weiterer Zufallszahlen (in Form wilder Zeichenfolgen).