Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Zufallszahlen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
09.09.2004, 18:10 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Wieso ist das unmöglich? Ist irgendwo festgelegt, dass rand () nie zweimal aufeinanderfolgend dieselbe Zahl liefert?


ja

rand funktioniert nach dem motto x(n+1) = (a*x(n) +b)%c

a,b und c sind schlau gewählte konstanten...

das heisst wenn du irgendwann mal wieder bei der gleichen zahl ankommst hast du zwangsläufig die periode einer zufallszahl über schritten und es geht von vorne los...
deswegen hast du ja auch immer die gleiche reihe in abhängigkeit welchen seed du wählst

jetzt kannst du natürlich sagen das du ja rand()%4712 gerachnet hast und das deswegen öfter die 4711 kommen könnte. ja das wäre dann zwar richtig aber damit hättest du dir die gleichverteilung total zerschossen... (da du ja massenweise zwischenzahlen weglässt) die dann wenn du einfach nur um 15 bit shiftet ja auch weglässt...)

wenn du z.b. eine würfel nimmst rechnest du ja rand()%6... genaugenommen hast du dir damit schon die gleichverteilung zerkloptt weil die 0 und die 1 eine höhere warhscheinlichkeit haben als die 2,3,4,5... ist in dem fall dann noch akzeptabel aber wenn du das mit höheren zahlen machst kommst du unweigerlich irgendwann an die schmerzgrenze...
also bei %1000 mit ner 15 bit zufallszahl von ner gleichverteilung zu sprechen ist einfach nur noch ein hohn... das könntest du damit kitten indem du alle zahlen von 32000 bis 32767 jeweils wegschmeisst und dann ne neue zahl ziehst...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
09.09.2004, 21:10 Uhr
virtual
Sexiest Bit alive
(Operator)


@Windalf
Die von Dir zitierte Formel ist aber nur die Hälfte der Wahheit:
Die Zufallsgeneratoren, die ich kenne arbeiten intern mit einer Formel der Art die Du sie nennst, das ist richtig. Aber, und das solltest Du nicht verschweigen: Sie geben nicht etwa X(n) oder so zurück, sondern nur einen Teil (eben die unteren Bits). So ist es ja auch kein zufall, daß rand() nur einen Wertebereich von 15 Bit hat, denn intern wird eben die von Dir genannte Formel verwendet, aber eben auf 32 Bit und nur die unteren Bits zurückgeliefert.

Übrigens arbeitet der Zufallsgenerator auf meinem System intern mit 64 Bit und extern sind 31 Bit sichtbar. Und wenn ich folgendes Programm laufen lasse:

C++:
#include <iostream>
#include <cstdlib>

int main()
{
    srand(time(NULL));

    int anzahl = 0;
    int jetzt = -1;
    int davor = -2;

    while(anzahl<10)
    {
        jetzt = rand();
        if (jetzt==davor)
        {
            std::cout<<jetzt<<std::endl;
            anzahl++;
        }
        davor = jetzt;
    }
}


Dann läuft es nicht ewig (wenngleich recht lange), die Ausgabe, seitdem ich angefangen habe zu schreiben:

Code:
321423738
1673865205


Sorry, aber das was Du schreibst ist nicht korrekt, und das sollte auch vor dem Hintergrund einleutchen, den ich Anfangs erwähnte.

Wo Du allerdings recht hast, ist die Sache wenn Du Modulo N rechnest: Wenn ld(N) keine ganze Zahle ist, (also N keine 2er Potenz ist), dann hast Du keine Gleichverteilung mehr. In diesem Zusammenhang sei darauf hingewiesen, daß meine eingangs vorgestellten Funktionen dies aber niemals tun.

PS. Es sind noch folgende Zahlen dazu gekommen:

Code:
807870191
27074908


Zufall, nehme ich an
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
09.09.2004, 22:39 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@virtual
Du bringst mich echt ganz schön ins wanken...
Ich habe dazu nur mal irgendwo was gelesen und das ganze war auch ziemlich einleuchtend aber dein beispiel spricht in der tat ne ganz andere sprache...
erstaunlich ist noch das der bei mir gar nicht lange warten muss der ist schon fertig sowie ich auf starten geklickt habe...*kopfkratz*

man könnte das ja mal auf c-plusplus.de diskutieren... dort gibt es vermutlich mehr leute die was zum thema sagen könnten und wollen als hier...
wie sich das nun wirklich genau verhält und warum wie was wo funktioniert würde mich jedenfalls auch mal interessieren... die theorie die ich mal irgendwo im i-net dazu gelesene habe war irgendwie ne andere...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
09.09.2004, 23:19 Uhr
(un)wissender
Niveauwart


Hm, mal zu eigentlichen Frage: kennt keiner diesen Funktionen der WinAPI?
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
10.09.2004, 09:15 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von Windalf:
@virtual
man könnte das ja mal auf c-plusplus.de diskutieren... dort gibt es vermutlich mehr leute die was zum thema sagen könnten und wollen als hier...


Kannst Du gerne machen. Ich nehme an, daß diese Diskussionen allerdings mit der gleichen Verve geführt werden, wie ich sie aus dem guten alten Usenet kenne: jeder weiß nur die Hälfte (ich will mich da ja nicht ausnehmen), will aber jedenfalls recht haben.


WEnn es Dir wirklich auf qualitativ hochwertige Zufallszahlen ankommt, dann sind die in der Regel Anwendungsfallabhängig. Oder aber du nimmt direkt den echten Zufall an Stelle von Pseudozufallszahlen...
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
10.09.2004, 09:59 Uhr
ao

(Operator)



Zitat von (un)wissender:
Hm, mal zu eigentlichen Frage: kennt keiner diesen Funktionen der WinAPI?

Nein, ich kenn sie nicht. Aber der Hinweis, aus mehreren kurzen Zufallszahlen eine längere zu basteln, war doch eigentlich deutlich genug.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
10.09.2004, 14:56 Uhr
Hans
Library Walker
(Operator)


Hi,

ich hab mir die Diskussion zwar nur oberflächlich angesehen, aber wenn ihr weitere Probleme habt, seht doch einfach mal hier nach. Für mich war es bisher eine der brauchbarsten Quellen zu dem Thema.

Und was die WinAPI-Funktionen angeht, davon hab ich auch noch nicht gehört. Aber vielleicht steht ja in der MS-Knowledgebase was dazu...

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 10.09.2004 um 15:00 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: