Zufallszahlen nicht normal verteilt

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zufallszahlen nicht normal verteilt

    Stehe gerade vor folgendem Problem:

    Ich simuliere einen Würfelwurf und ermittle die Häufigkeit der jeweils geworfenen Zahl. Dabei werden zwar schön alle Zahlen von 1 bis 6 geworfen ( [COLOR=DeepSkyBlue] [COLOR=Red]$wurf=rand(1,6);[/COLOR] [/COLOR] ) aber wenn ich das in einer Schleife sich z.B. 600 mal wiederholen lasse kommen immer erstaunlich wenig Einsen dabei raus, alle anderen Zahlen erscheinen gleichmäßig verteilt, nur die Eins ist immer der absolute Ausreisser nach unten.

    Das der Befehl nicht korrekt ist scheint mir ja eigentlich unmöglich, schliesslich wird ja (ab und zu) eine Eins geworfen, nur eben nicht wie eigentlich erwartet alle Zahlen so um die 100 mal sondern immer nur ca 20 Einsen und der Rest (wie erwartet) gleichmäßig verteilt auf Zweier bis Sechser ! Die Summe aller Häufigkeiten ist auch immer genau 600, so dass auch eine fehlerhafte Ermittlung der Häufigkeiten ausgeschlossen werden kann.

    Versuche mit [COLOR=Red]mt_rand[/COLOR] brachten keine Änderung und auch [COLOR=Red]srand()[/COLOR] blieb wirkungslos.

    Rohcode:
    PHP-Code:
    <?php

    $anzahl1
    =0;
    $anzahl2=0;
    $anzahl3=0;
    $anzahl4=0;
    $anzahl5=0;
    $anzahl6=0;

    for (
    $i=1;$i<=600;$i++)
    {
     
    $zahl=rand(1,6);
     if (
    $zahl==1) {$anzahl1=$anzahl1+1;}
     if (
    $zahl==2) {$anzahl2=$anzahl2+1;}
     if (
    $zahl==3) {$anzahl3=$anzahl3+1;}
     if (
    $zahl==4) {$anzahl4=$anzahl4+1;}
     if (
    $zahl==5) {$anzahl5=$anzahl5+1;}
     if (
    $zahl==6) {$anzahl6=$anzahl6+1;}
    }

    echo 
    "<h1>Häufigkeiten</h1>
          <table>
        <tr>
        <td>1er</td>
        <td>2er</td>
        <td>3er</td>
        <td>4er</td>
        <td>5er</td>
        <td>6er</td>
        </tr>
        <tr>
        <td>
    $anzahl1</td>
        <td>
    $anzahl2</td>
        <td>
    $anzahl3</td>
        <td>
    $anzahl4</td>
        <td>
    $anzahl5</td>
        <td>
    $anzahl6</td>
        </tr>
          </table>"
    ;
    ?>
    Hat jemand einen Schimmer was da falsch laufen könnte ????

  • #2
    versuchs mal mit mt_rand()
    Wir werden alle sterben

    Kommentar


    • #3
      Problem nicht nachvollziehbar, der gezeigte Code liefert eine Gleichverteilung im zu erwartenden Rahmen.

      Auf was für einem System läuft PHP bei dir, und welche Version?
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        keine Änderung

        hatte ich ja schon ausprobiert, reagiert genauso falsch !

        ich habe mal aufgezeichnet, was hier z.B. bei 50*600 Durchgängen rauskommt:

        PHP-Code:
             Runde     1er     2er     3er     4er     5er     6er              
        1     21     117     119     105     114     124
        2     21     111     111     129     117     111              
        3     27     126     111     113     100     123             
        4     16     116     106     120     127     115             
        5     16     125     102     133     120     104              
        6     16     126     115     107     117     119              
        7     11     130     138     85     109     127              
        8     23     116     121     109     116     115              
        9     9     116     135     122     124     94              
        10     20     119     103     124     117     117              
        11     21     108     133     104     130     104              
        12     17     110     119     117     126     111              
        13     16     114     120     101     122     127              
        14     12     103     109     109     141     126              
        15     14     128     109     105     112     132              
        ... 
        Zuletzt geändert von TobiaZ; 17.04.2010, 21:58. Grund: Code Umgebrochen

        Kommentar


        • #5
          System

          Ich lasse das Ganze direkt über den webserver von hosteurope laufen, hat bislang eigentlich immer tadellos funktioniert.

          Kommentar


          • #6
            mal zum anklicken ;o)

            wer möchte kann sich das Ganze auch gerne mal starten:

            http://www.winti.de/PHP/wurf.php

            Kommentar


            • #7
              Zum Vergleich:
              http://php.tobiweb.net/test/wuerfel.php

              Bleibt also nur:

              Zitat von wahsaga Beitrag anzeigen
              Problem nicht nachvollziehbar, der gezeigte Code liefert eine Gleichverteilung im zu erwartenden Rahmen.

              Auf was für einem System läuft PHP bei dir, und welche Version?
              EDIT: Mal rein aus Interesse, wie sehen die Zahlen aus, wenn du den Code hier ausführst?

              PHP-Code:
              <?php

              $counter 
              = array(1=>0,0,0,0,0,0);

              for (
              $i=1;$i<=600;$i++)
                  
              $counter[rand(2,7)]++;
              ?>

              <h1>Häufigkeiten</h1>
              <table>
                <tr>
                  <th>Augenzahl</th>
                  <th>Häufigkeit</th>
                </tr>
                
              <?php
              foreach($counter as $i => $num)
                  echo 
              '<tr><td>' $i '</td><td>' $num '</td></tr>';
              ?>
                
              </table>
              Probiers auch mal mit anderen Zahlen.
              Zuletzt geändert von TobiaZ; 17.04.2010, 20:40.

              Kommentar


              • #8
                geht auch nicht ???

                Danke für das Beispiel, bei Dir funktioniert es , na klar ;o)
                bei mir (hosteurope) nicht, wie nicht anders zu erwarten :-(

                das ist das Ergebnis Deines Programms auf meinem webserver:
                Code:
                [B]Häufigkeiten[/B]
                
                         Augenzahl     Häufigkeit       1021131224118510761277115
                jetzt hoffentlich auch formatiert:
                Häufigkeiten

                Augenzahl Häufigkeit 1021131224118510761277115

                EDIT:
                by TobiaZ: so wäre es schön formatiert!
                Augenzahl Häufigkeit 1 0 / 2 11 / 3 122 / 4 118 / 5 107 / 6 127 / 7 115

                Zuletzt geändert von TobiaZ; 17.04.2010, 21:48. Grund: Postings zusammengeführt & Zahlen auseinander gefriemelt.

                Kommentar


                • #9
                  Kannst du das Ergebnis bitte vernünftig formatieren?

                  EDIT:
                  Tipp: Es gibt nen VORSCHAU-Button. Und nutz doch bitte die Editier-Funktion.

                  EDIT:
                  Habs jetzt mal schön gemacht bei dir.
                  Also gut, bei dir wird weiterhin die kleinste "Augenzahl" zu selten gewürfelt. Restliche Fragen bleiben weiter offen.

                  Zuletzt geändert von TobiaZ; 17.04.2010, 21:50.

                  Kommentar


                  • #10
                    sorry

                    muss mich in diesen Editor erst noch eindenken ;o)

                    Kommentar


                    • #11
                      Okay, mehr können wir dann aber jetzt nicht hellsehen... (auch sorry)

                      Kommentar


                      • #12
                        Wenn du 600 Versuche mit einem 6er Würfel brauchst, aber dein rand() bei 1 kaputt ist, dann mach halt 600/6*7 = 700 Versuche mit einem 7er Würfel. Die 1er Würfe schmeißt du weg und bei den 2-7er Würfen ziehst du 1 von der Augenzahl ab. Dann stimmts doch, oder?
                        Du könntest natürlich auch gleich von 2 bis 7 Würfeln und 1 abziehen, aber vielleicht ist den rand() nicht bei 1 kaputt sondern beim Beginn des Wertebereichs.

                        Man muss aber auch mal sagen, dass rand() nicht "von selbst" solchen Murks macht. Dein Provider hat da dran rumgepatcht oder der Zufallsgenerator des OS unten drunter ist schon kaputt.
                        Zuletzt geändert von onemorenerd; 18.04.2010, 11:55.

                        Kommentar


                        • #13
                          so klappt das nicht ....

                          weil wenn ich 700 Ziehungen mache und die 1er wegschmeisse ergibt sich keine saubere Normalverteilung. Und auf anderen Webservern ergeben sich ja eben die sauberen Ergebnisse. Also muss das wohl an hosteurope liegen, bei denen läuft irgendwas verkehrt, habe mich bereits mal da gemeldet und um Klärung gebeten, wenn ich eine (hoffentlich klärende) Antwort erhalte werde ich das hier natürlich veröffentlichen.

                          Kommentar


                          • #14
                            Welche PHP-Version läuft da?

                            Kommentar


                            • #15
                              es läuft die PHP-Version 5.2.12, wird vom Script jetzt am Anfang auch ausgegeben:

                              http://www.winti.de/PHP/wurf.php

                              Kommentar

                              Lädt...
                              X