Wie wird eine Zufallszahlen generiert ??
-
OT:
Naja, also wenn ihr das so genau nehmt (vonwegen Berechnung über die Zeit => im prinzip keine Zufallszahl), dann gibt es wohl überhauptkeine Zufallszahlen! Weder auf dem PC noch im realen leben.
Denn letztenendes wird auch eine Zufallszahl im realen Leben immer irgendwie "initialisiert"! Nur halt in diesem Fall durch Vektoren(Kräfte), Reibung, usw. (Bsp. Würfel).
Es gibt demnach keine Zufallszahlen, sie sind nur aus dem Auge des (außenstehenden) Betrachters Zufällig.[ Dieser Beitrag wurde am 06.03.2003 um 00:01 Uhr von THE_FreaK editiert. ]
-
unwissender der vielen diskussionen über den zufall in diesem forum...
-
@TheFreak:
Es hat ja auch keiner behauptet, daß es echte Zufallszahlen gibt. Allerdings haben wir (mathematisch)definiert, wie sie aussehen sollen und können daher mit ihnen Rechnen (Gleichverteilungsannahme etc.). Das einzige, was wir hier behaupten, ist daß man mit dem Rechner (ich meine mit dem Rechner allein, ohne Maus-Bewegungen oder so)´keine echten Zufallszahlen erzeugen kann.
MfG Jester, der hofft, einer neuen Zufalls-Diskussion zu entgehen.
-
Original erstellt von THE_FreaK:
Weder auf dem PC noch im realen leben.Doch, gibt es im realen Leben => thermisches Rauschen.
-
Unschärferelation!
-
Original erstellt von Marc++us:
Doch, gibt es im realen Leben => thermisches Rauschen.*unterstütz* http://random.org
(oder auch http://www.noentropy.net/ )
-
Original erstellt von <GKone>:
wieso sind dir die zufalszahlen von rand() nicht gut genug?
Was meinst Du mit einer 'besseren' Zufallszahl.
Am End kann ein Computer keinen 'echten' Zufallszahlen erzeugen. Die Güte einer Reihe von Zufallszahl hängt einzig und alleine von ihrer Streuung ab.
Einfache Funktionen mit guter Streuungen können sein:
f(x) =(a * x + b) mod m
wobei a und b paareise verschiedene Primzahlen sind, oder
f(x) = aufrunden(m*x*z) mod m
wobei z zwischen 0 und 1 liegt. Interessant ist in diesem Beispiel eine besonders gute Streung, wenn z ungefähr der "Goldene Schnitt": (Wurzel(5)-1)/2 ist.
Dafür gibts sogar mathematische Evidenz. Auf die hab ich jetzt aber kein Bockmein VB code dazu (habe gerade keinen c++ compiler :D) :
Private Sub Command1_Click()
'variablen
Dim z As Integer
Dim m As Integer
Dim x As Integer
Dim d As Integer'vars einen Wer zuweisen
d = 12 'd= 12
z = (Sqr(5) - 1) / 2 'z =(Wurzel(5)-1)/2
m = Sqr(5) 'm ist Wurzel aus 5
x = 5 ' x = 5
MsgBox Round(m * x * z) Mod d ' aufrunden(m*x*z) Modulo d
End Subda kommt IMMER 10 raus - also keine Zufallszahl
-
Original erstellt von Marc++us:
**Das wird eigentlich nie per Zeit auslesen gemacht... Du meinst, daß man den Startwert aus der Zeit setzt? Ja, das wurde schon auf dem C64 so gemacht... und das war vor 20 Jahren.[Ok, unter Linux kann man von einem rand-Device direkt Zahlen lesen, die aus dem thermischen Rauschen gewonnen werden, aber bleiben wir mal beim Normalfall]
Ein Zufallszahlengenerator sieht so aus:
static int basiswert = 12345; int rand() { basiswert = irgendeinefunktion(basiswert) % obergrenze; return basiswert; } void srand(int start) { basiswert = start; }
Ok, was passiert wenn Du das Programm startet, steht nun im basiswert halt immer die gleiche Zahl drin... daher nimmt man die Zeit um den Basiswert zu verändern und die Ausgangszahl für die Berechnung von Programmlauf zu Lauf unterschiedlich zu haben. Und wie gesagt, diese Idee verwendet man schon seit Anbeginn der Zeit (oder fast so lange).
Trickreich und wichtig für die Güte des Generators ist aber die Funktion, die in rand aufgerufen wird... da kommen allerlei Divisionen mit Primzahlen vor. Ein Generator ist dann gut, wenn er gewisse statistische Tests besteht (dauert lange, bis sich Zahlen wiederholen, alle Zahlen gleich oft, usw).
Kannst ja mal versuchen, z.B. einen Generator für Zahlen von 1..16 zu entwickeln... z.B. mit Basis = (Basis + (Basis * 31) / 11)%15. Das wäre schon ein Generator vom gleichen Prinzip... nur mußt Du jetzt mal schauen, welche Zahlen er ausspuckt.**
da kommt auch IMMER nur 10 raus :
Private Sub Command1_Click()
Dim basiswert As Integer
Dim Obergrenze As Integer
basiswert = 12345
Obergrenze = 12basiswert = (Sqr(5) - 1) / 2 * basiswert Mod Obergrenze
MsgBox basiswert
End Sub
"void srand(int start)
{
basiswert = start;
}"ich will ja keine zufallsfunktion aufrufen..
machs jetzt über ne time funktion :p (anders geht das net oder ?? weil du ja immer die gleiche rechnung drinne hast - also er rundet immer gleich oder du musst ne formel erzeugen, die eine richtig lange zahl ausspuckt, und nach 0,00314 sec hörst du auf oder so und nimmst die letzten 2stellen oder so, rechnet ja mal schneller mal langsamer je nach cpu auslastung ;))
[ Dieser Beitrag wurde am 06.03.2003 um 16:02 Uhr von Ranus.net editiert. ]
-
Original erstellt von THE_FreaK:
Weder auf dem PC noch im realen leben.Wie steht's mit Schrödingers Katze?
-
ahjo, falls es euch interresiert : hier mein projekt :
http://www.coders-zone.de/board/thread.php?threadid=93&boardid=8&styleid=4mit code c ya
-
OT:
@Jester: war villeicht etwas zu allgemein formuliert von mir...
deshalb hab ich ja auch extra "OT:" geschrieben, weils etwas am Thema vorbeigeht@Marc++us
Nungut, es ist definitiv nicht leicht zu berechnen, allerdings (nachdem was ich bisweilen über thermisches rauschen gelesen hab)scheint es doch eine abhängige größe der Temperatur zu sein.Fakt ist doch jedenfalls, das selbst wenn wir etwas nicht berechnen können es nicht heißt das es nicht berechenbar ist. Hier spielt wieder die perspektive eine Rolle!
Ein Sack voll weißer Kugeln. Person A weiß das sich eine schwarze Kugel in dem Sack befindet, Person B weiß das nicht. B nimmt eine Nach der anderen aus dem Sack heraus. Angenommen B erwischt die schwarze als letztes, dann steigt für B mit jeder weißen Kugel die w*****einlichkeit, das er nur weiße Kugeln aus dem Sack herausholt. A jedoch hat eine information mehr. Für ihn steigt die wahrscheinlichkeit, dass B eine schwarze Kugel findet.
Ok, abgeschweift! ...aber villeicht auch nicht, denn was ist denn wenn wir mit dem thermischen rauschen die weißen Kugeln Ziehen? Villeicht finden wir bald ne schwarze?!
Ich hab nun zugegeben viel nach dem thermischen rauschen gesucht, da ich damit absolut nichts anfangen konnte, aber was klar geworden ist:
Das thermische rauschen hängt von der temperatur des objektes ab. da es sich um elektronenbewegung handelt wird auch das Material eine Rolle spielen, usw. führt man das weiter so lässt sich garntiert irgendwann eine Formel aufstellen, und schwups sind unsere Zufallszahlen keine mehr, weil eindeutig berechenbarGreetz
THE_FreaKPS: sry falls ich euch damit nerve *g*
-
oh nein, jetzt wird es philosophisch Ob es Zufall gibt oder nicht, sollten wir in einem anderen Thread diskutieren (auch wenn wir wahrscheinlich zu keinem Ergebnis kommen werden (man bedenke, dass die alten Griechen sich deswegen schon gestritten haben)), gehen wir hier einfach davon aus, dass es sowas wie Zufall gibt oder zumindest Zahlen, die man so erzeugen kann, dass sie einem Zufall vorspielen
wieso sind dir die zufalszahlen von rand() nicht gut genug?
rand liefert auf den meisten System wenige zufällige Zahlen zurück, als für Anwendungen von nöten seien können, gerade in der Kryptographie steigt und fällt die Sicherheit vieler Algortihmen/Schlüssel mit der Stärke der benutzen Zufallszahlen
Was meinst Du mit einer 'besseren' Zufallszahl.
eigentlich meinte ich, dass der Weg diese zu gewinnen besser ist, da er zufälligere Zahlen liefert
http://www.robertnz.net/true_rng.html
Die Links und die die nman gepostet hat, kann ich nur empfehlen mal zu studieren @all
http://directory.google.com/Top/Computers/Algorithms/Pseudorandom_Numbers/?tc=1
-
Original erstellt von THE_FreaK:
**OT:
@Marc++us
Nungut, es ist definitiv nicht leicht zu berechnen, allerdings (nachdem was ich bisweilen über thermisches rauschen gelesen hab)scheint es doch eine abhängige größe der Temperatur zu sein.Fakt ist doch jedenfalls, das selbst wenn wir etwas nicht berechnen können es nicht heißt das es nicht berechenbar ist. Hier spielt wieder die perspektive eine Rolle!
...
Ich hab nun zugegeben viel nach dem thermischen rauschen gesucht, da ich damit absolut nichts anfangen konnte, aber was klar geworden ist:
Das thermische rauschen hängt von der temperatur des objektes ab. da es sich um elektronenbewegung handelt wird auch das Material eine Rolle spielen, usw. führt man das weiter so lässt sich garntiert irgendwann eine Formel aufstellen, und schwups sind unsere Zufallszahlen keine mehr, weil eindeutig berechenbar **Nein! Unschärferelation!
-
und nichtlineares dynamisches system mit chaos.
-
für die krypto braucht man was stärkeres, vor allem nen dickeren zahlenraum. anderenfalls kann man die 2^31 möglichen ausgaben von rand() einfach alle testen und schwups.
ansonsten ist rand() ok und die aussage, es sei schlecht, ist veraltet kunde von solchen 16-bittigen dampfmaschinen.
-
zum Beispiel Blum-Blum-Shub (BBS)
-
Original erstellt von THE_FreaK:
Das thermische rauschen hängt von der temperatur des objektes ab. da es sich um elektronenbewegung handelt wird auch das Material eine Rolle spielen, usw. führt man das weiter so lässt sich garntiert irgendwann eine Formel aufstellen, und schwups sind unsere Zufallszahlen keine mehr, weil eindeutig berechenbarNope => Quantentheorie.
Mußt Dir mal z.B. die Sache mit dem Tunneln von Elektronen (und anderen Miniteilchen) ansehen, es ist wirklich nicht vorherberechenbar, in der (sub)atomaren Welt wimmelt es von Effekten, wo irgendwas spontan (Ort&Zeit nicht bestimmt) passiert. Man kann nur statistische Aussagen darüber treffen. Natürlich kann man diese wieder für bestimmte Zwecke zielgerichtet einsetzen, aber der eigentliche Effekt entzieht sich der Berechnung. Das muß sogar sein und läßt sich wiederum zweckdienlich einsetzen, aber Du wirst hier mit Deiner Newtonschen Physik (jedes Teilchen läuft auf einer Bahn und kollidiert mit anderen) nicht weiter kommen.
-
Hat jemand auhc eine Seite parat wo die Mathematik dazu erklärt wird?