Wie wird eine Zufallszahlen generiert ??



  • 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 = 12

    basiswert = (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=4

    mit 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 berechenbar 😉

    Greetz
    THE_FreaK

    PS: 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 berechenbar 😉

    Nope => 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?


Anmelden zum Antworten