Echte Zufallszahlen - Geht das?



  • Kann man in C++ echte Zufallszahlen machen?
    denn mit folgenem kommen immer die selben Zahlen in selbiger Reihenfolge!

    rand() % 37
    

    Würde mich um eine Lösung freuen. Denn bei einem Roulette sind immer gleiche Zahlen irgendwie ungünstig! 😉

    MfG Felix



  • Naja, ein bißchen echter wird es schon. Ruf vor dem ersten Aufruf von rand (und nur ein einziges Mal!) srand(time(0)) auf. Echter Zufall ist das zwar nicht, aber auf jeden Fall deutlich besser als rand immer mit dem gleichen seed zu verwenden.

    MfG Jester



  • Um deine Frage zu beantworten: Nein.

    Echte Zufallszahlen sind nicht möglich. Denn genau genommen gibt es keinen Zufall.

    Du solltest dir aber mal die Funktion srand() ansehen. Die wird dir helfen.



  • Ah danke,
    wenn es keinen echten Zufall gibt wird wohl auch da ein System hinter stecken aber das ist immerhin nicht auf den ersten blick zu durchschauen und beim gleichen Randwert nicht immer gleich!
    Thx mein Roulette ist gerettet^^
    MfG Felix



  • MAG schrieb:

    Denn genau genommen gibt es keinen Zufall.

    Sagt wer?





  • Und was haltet ihr vom Mersenne Twister?

    http://www-personal.engin.umich.edu/~wagnerr/MersenneTwister.h

    #include <iostream>
    #include "MersenneTwister.h"
    using namespace std;
    
    MTRand xrand;
    
    int main()
    {
        int x[10];
    
        // x mit gleichmäßig verteilten Zufallszahlen füllen
        for(int a = 0; a < 10; a++)
            x[a] = xrand.randInt(100);
    
        // Ausgabe
        for(int b = 0; b < 10; b++)
            cout << x[b];
    
        return 0;
    }
    


  • Also ein Computer kann wirklich schlecht "Zufall" erzeugen, wie soll das bitte gehen?

    Aber es gibt natürlich Algorithmen die einen Zufall simulieren. In Boost gibt es eine Zufalls-Library, wo man per Policy den ZUfallsalgo selbst auswählen kann. Ein paar Algos sind schon dabei und man kann auch eigene Algos hinzufügen.



  • Artchi schrieb:

    Also ein Computer kann wirklich schlecht "Zufall" erzeugen, wie soll das bitte gehen?

    rauschen von der soundkarte ist z.b. ne gutebillige möglichkeit.
    ansonsten ist natürlich klar, dass man mit einem deterministischen algorithmus immer dasselbe ergebnis bekommt, also nicht wirklich "zufall" erzeugen kann.



  • MAG schrieb:

    Echte Zufallszahlen sind nicht möglich. Denn genau genommen gibt es keinen Zufall.

    Schon mal von der Heisenbergschen Unschärferelation und dem damit verbundenen "Ende" des Laplaceschen Determinismus gehört? :p
    Geiger-Müller-Zähler und Uhr an den PC und schon hast du einen 1A Zufallsgenerator 😉



  • Hallo,
    ich habe zwar nicht viel Ahnung bis jetzt von C++,
    aber es müssten bei der Vielzahl von Zufallszahlen
    die in Spielen oder für Rauschgeneratoren gebraucht
    werden eine Leichtigkeit sein für das Roulette von
    Felix ein paar Zeilen Code anzubieten.

    Verstehe die Diskussion grad nicht, weil hier aus
    dem kleinen Problem gleich ne Grundsatzdiskussion
    über "echten Zufall" geführt wird.

    Ich habe früher auf dem Amiga die Position des
    horizontalen Rasterstrahls mehrmal abgefragt und
    ein bissle XOR verkünft. Für nen zufälliges
    Sternenfeld hats locker ausgereicht.

    Sind denn die Random-Funktionen in C++ so mieß, dass
    sie nicht für ein simples Roulette reichen????

    Gruß Chris



  • Ich glaub Felix ist schon zufrieden:

    Thx mein Roulette ist gerettet^^

    mfg.



  • .filmor schrieb:

    Geiger-Müller-Zähler und Uhr an den PC und schon hast du einen 1A Zufallsgenerator 😉

    Na klar. Dann kann ich ja auch gleich mein persönliches Hubble-Teleskop an den PC anschließen und aus dem Verhältnis von hellen zu dunklen Stellen auf einem Bildausschnitt des Himmels von 3,2° x 3,2° meine Zufallszahlen berechnen ... 😃

    Er meinte sicherlich, dass es mit "normalen" Bordmitteln eines Computers & Algorithmen nicht möglich ist, "echte" Zufallszahlen zu generieren.

    PS: Trotz intensiver Suche finde ich nichts bei ebay zum Thema "usb geigerzähler für PC".



  • Interessanterweise ist es übrigens möglich mit einer recht kleinen Menge ( einige 1000 Bit) gutem Zufall aus schlechtem Zufall guten zu erzeugen. Die kleine Menge an initialem Zufall kann dabei immer wieder verwendet werden.



  • In Spielen ist es sogar von Vorteil, wenn man keinen echten Zufall hat. So kann man das Spiel immer wieder unter den gleichen Bedingungen testen (bei nem Bug könnte es sonst recht schwierig werden, wenn man dem Zufall überlassen muss wie lange es dauert bis man ihn reproduzieren kann).



  • Hä? Wenn ich teste (egal ob Spiel oder Anwendung) dann auch nicht mit unechten Zufällen. Entweder Zufall oder einem _bestimmten_ Wert. Tests beruhen immer auf gleiche Eingangswerte und nicht auf "ein bisschen Zufall". Wie soll das gehen?

    Deshalb sollte man sich auch Policies schreiben, so das man für Testzwecke einfach eine Test-Policy verwendet, welche wiederrum keinen Zufall erzeugt. Boost.Ramdom macht das sehr schön vor, wie sowas geht.



  • Hallo,

    Hier mal zwei Möglichekeiten, wie man an "echte" Zufallszahlen kommt
    http://www.random.org/
    http://www.westphal-electronic.de/



  • Artchi schrieb:

    Hä? Wenn ich teste (egal ob Spiel oder Anwendung) dann auch nicht mit unechten Zufällen. Entweder Zufall oder einem _bestimmten_ Wert.

    War sicher so gemeint. Man macht dann halt nicht srand(time(0)) sondern srand(FESTER_WERT) und kann immer wieder dieselbe Situation durchspielen.



  • Off-Topic:

    Walli schrieb:

    MAG schrieb:

    Denn genau genommen gibt es keinen Zufall.

    Sagt wer?

    Ich. 😉

    Die Frage ob es denn nun "Zufall" (im eigentlichen Sinne) gibt oder nicht ist wohl eher eine philosophische, aber auch wissenschaftliche Frage. Es gibt verschiedene Theorien zum Thema. Einige Leute behaupten daher, dass es keinen Zufall gibt, sondern jedes Ereignis nur eine Folge einer Reihe vorhergehender Ereignisse ist.
    Die Unvorsehbarkeit oder Unberechenbarkeit ergebe sich nur daraus, dass dem Betrachter nicht alle Informationen zur Verfügung stehen, oder er sie nicht erfassen kann, die nötig wären um das Ereignis vorherzusagen.

    Naja, wir könnten jetzt noch Wochen lang darüber diskutieren, wir kämen sicherlich nie zu einem Ergebnis. Für einige ist der Lauf der Dinge Vorhersehung, für einige andere die zwangsläufige Folge des Zusammenwirken verschiedener Ereignisse und für wieder andere (wohl die meisten?) ist es einfach nur Zufall. Meine Ansicht habe ich ja schon erklärt. Allerdings begrenze ich dies. Wenn es um Dinge wie Würfeln und ähnliches geht halte ich daran fest, dass es keinen Zufall gibt. Aber sobald es was mit Menschen und deren Entscheidungen und Handeln zu tun hat... könnte man sagen, es ist purer Zufall. Oder einfach nur zu komplex um es vorherzusehen...? Nein, dies würde an religiöse Vorstellungen von Schicksal oder göttliche Vorhersehung grenzen, und davon distanziere ich mich strikt. :p

    ...gibts hier eigentlich schon ein Philosophie-Forum? 🤡



  • DarthZiu schrieb:

    PS: Trotz intensiver Suche finde ich nichts bei ebay zum Thema "usb geigerzähler für PC".

    Du nimmst einfach ein Zählrohr und packst es an den seriellen Port. Ich bin zwar kein Elektroniker, aber grundsätzlich sollte das nicht so das Problem sein. Und eine (ausreichend) genaue Uhr hat jeder PC an Bord :p.

    MAG schrieb:

    Die Unvorsehbarkeit oder Unberechenbarkeit ergebe sich nur daraus, dass dem Betrachter nicht alle Informationen zur Verfügung stehen

    KÖNNEN. Sie können nicht zur Verfügung stehen, das hat nichts mit ihrer Erfassbarkeit zu tun. In geeignet kleinem Rahmen ist alles zufällig und nichts determiniert. Und da wir in diesem geeignet kleinen Rahmen beobachten können, können wir perfekte Zufallszahlen generieren.


Anmelden zum Antworten