Zufallszahl



  • Chechen65 schrieb:

    Nathan schrieb:

    int main(){
        using namespace std;
        mt19937 mt(time(nullptr));
        uniform_int_distribution<int> dist(1, 50);
        cout << dist(mt);
    }
    

    Hast du es ausprobiert? von eins bis 6 zeigt es Zahlen wie schon gesagt aufsteigend an. Ist es so schwer einen Zahlengenerator zu schreiben?

    Ich habe gewürfelt und es waren echt zufälligere als bei dem Quellcode 😃
    Ich hab alles ausprobiert und man kann immer erahnen welche Zahl generiert werden wird von 1 - 6.
    Was ich sagen kann ist das mit dem Quellcode z.B. die chance eine 1 zubekommen nicht 1 zu 6 steht.

    http://ideone.com/kWiOQi
    sieht für mich fair aus.

    edit:
    http://en.wikipedia.org/wiki/Clustering_illusion



  • Das hängt vor allem von der Testmenge ab. Wenn du sechs mal würfelst heißt das ja nicht, dass jede Augenzahl ein mal vorgekommen ist, nur weil die Wahrscheinlichkeit 1:6 ist. Würfel ein paar tausend Mal und guck, wie dann die Verteilung aussieht.

    #include <ctime>
    #include <ctime>
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        srand( time( 0 ) );
        unsigned int Counter[6] = { 0,0,0,0,0,0 };
        for( unsigned int i = 0; i < 100000; ++i )
        {
           Counter[rand() % 6]++;
        }
        for( unsigned int i = 0; i < 6; ++i )
        {
           cout << "Augenzahl " << i +1 << " wurde " << Counter[i] << " gewürfelt\n";
        }
    }
    

    Sieht bei mir nicht "komisch" aus...



  • DocShoe schrieb:

    #include <ctime>
    #include <ctime>
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        srand( time( 0 ) );
        unsigned int Counter[6] = { 0,0,0,0,0,0 };
        for( unsigned int i = 0; i < 100000; ++i )
        {
           Counter[rand() % 6]++;
        }
        for( unsigned int i = 0; i < 6; ++i )
        {
           cout << "Augenzahl " << i +1 << " wurde " << Counter[i] << " gewürfelt\n";
        }
    }
    

    Sieht bei mir nicht "komisch" aus...

    Änder mal die 100000 in 6 um, starte das Programm paar mal und schau dir die Zahlen an. Also ich hab ja schon 20 Mal gestartet und sie zeigt mir nicht einmal die 6.

    DocShoe schrieb:

    Wenn du pro Programmaufruf eine Zufallszahl willst, speichere den Zustand des Zufallsgenerators in eine Datei.

    Ich denke du weist das ich Anfänger bin? 🙂
    Wie den?



  • Chechen65 schrieb:

    Ich denke du weist das ich Anfänger bin? 🙂

    Ja, aber auch von Anfängern erwarte ich, dass sie sich selbst in ein Thema einarbeiten können. In deinem Fall wäre das Datei-Ein-/Ausgabe. Kann gut sein, dass das im Moment noch nicht angebracht ist, aber dann musst du eben deine Ziele niedriger setzen. Zum Beispiel indem du Zufallszahlen so generierst, wie es üblich ist -- nicht eine einzelne Zahl pro Programmaufruf.

    Was den Zustand angeht, zähle z.B. die Anzahl Aufrufe von operator() mit und speichere sie. Beim Laden kannst du mit discard() zum entsprechenden Zustand vorrücken.



  • Chechen65 schrieb:

    Änder mal die 100000 in 6 um, starte das Programm paar mal und schau dir die Zahlen an. Also ich hab ja schon 20 Mal gestartet und sie zeigt mir nicht einmal die 6.

    Und welche Zahl ergibt Modulo 6 wieder 6?

    Du bist so doof dass es weh tut.



  • Nexus schrieb:

    Was den Zustand angeht, zähle z.B. die Anzahl Aufrufe von operator() mit und speichere sie. Beim Laden kannst du mit discard() zum entsprechenden Zustand vorrücken.

    Ok, vielen Dank. Ich werd nach schauen was ich damit anfangen kann.



  • Chechen65 schrieb:

    DocShoe schrieb:

    Wenn du pro Programmaufruf eine Zufallszahl willst, speichere den Zustand des Zufallsgenerators in eine Datei.

    Das Zitat kommt nicht von mir.

    qweasdyxc schrieb:

    Und welche Zahl ergibt Modulo 6 wieder 6?

    Du bist so doof dass es weh tut.

    Klassisches Eigentor. Guck dir den Code lieber genauer an, bevor du andere Leute beleidigst. In der Tat werden zum Zählen nur Zahlen zwischen 0 und 5 erzeugt, aber die Ausgabe addiert 1, um auf die Augenzahlen 1 bis 6 zu kommen.



  • Ich hab das Problem gelöst.
    Ich habe das Fenster immer mit dem X oben rechts beendet. Anstatt es mit Enter etc. zu beenden. Deswegen kamen so komische Zahlen raus, srand(time(NULL)) reicht völlig aus 😃 Tut mir leid Leute....



  • Häh?



  • Chechen65 schrieb:

    Ich hab das Problem gelöst.
    Ich habe das Fenster immer mit dem X oben rechts beendet. Anstatt es mit Enter etc. zu beenden. Deswegen kamen so komische Zahlen raus, srand(time(NULL)) reicht völlig aus 😃 Tut mir leid Leute....

    Ob du Enter drückst oder Das Fenster schließt (und damit das Programm) sollte in dem Fall weniger als keine Auswirkungen auf folgende Programmstarts haben...



  • Skym0sh0 schrieb:

    Ob du Enter drückst oder Das Fenster schließt (und damit das Programm) sollte in dem Fall weniger als keine Auswirkungen auf folgende Programmstarts haben...

    Das hat mich auch komischerweise gewundert.



  • Chechen65 schrieb:

    Skym0sh0 schrieb:

    Ob du Enter drückst oder Das Fenster schließt (und damit das Programm) sollte in dem Fall weniger als keine Auswirkungen auf folgende Programmstarts haben...

    Das hat mich auch komischerweise gewundert.

    Und daraus folgern wir, dass du entweder an anderer Stelle einen Fehler gemacht hast oder eine Folge von sehr unwahrscheinlichen Fällen (in dem Fall Zahlen) dich heimgesucht hat.


Anmelden zum Antworten