Windows Zufallszahlen



  • Hey,

    ich generiere mit rand() Zufallszahlen, aber erhalte erstaunlich oft die gleichen hintereinander. Das stört mich. Gibt es eine Möglichkeit, es etwas "zufälliger" zu machen?

    Danke

    Mr. ABC



  • Ja. Aber dann werden sie unzufälliger.



  • Hast du randomize() aufgerufen bevor du rand() aufrufst?
    Das ganze hat übrigens nichts mit Windows zu tun und ich gehe jetzt einfach mal daovn aus das du C oder C++ benutzt. Wenn du was anderes benutzt: kA.



  • volkard schrieb:

    Ja. Aber dann werden sie unzufälliger.

    Hast du ein Beispielcode?

    blub² schrieb:

    Hast du randomize() aufgerufen bevor du rand() aufrufst?
    Das ganze hat übrigens nichts mit Windows zu tun und ich gehe jetzt einfach mal daovn aus das du C oder C++ benutzt. Wenn du was anderes benutzt: kA.

    Ja, daran liegt es nicht.



  • Mr. ABC schrieb:

    volkard schrieb:

    Ja. Aber dann werden sie unzufälliger.

    Hast du ein Beispielcode?

    statt
    x=rand()%49;
    nun
    do
    x=rand()%49;
    while(x==altesx);
    altesx=x;

    aber das löst keine probleme, sondern führt nur auf abwege. du solltest nicht fragen, wie du die zahlen zufälliger machen kannst, fürchte ich, sondern erstmal darlegen, inwiefern sie unzufällig sind. und dann kommt schon jemand und beschimpft dich. 🤡



  • Das Problem ist leider etwas komplexer. Ich habe mehrere Threads, die eine Funktion getRandomEntry aufrufen. Blöderweise kommt es erstaunlich oft vor, dass der gleiche Eintrag hintereinander gewählt wird. Ich weiß nicht, ob das am Zufallsgenerator oder an den Threads liegt.

    Ich würde das Problem aber gerne lösen, so dass das nicht mehr so oft passiert und es zufälliger ist.



  • rand() funktioniert mit mehreren threads gar nicht zuverlässig.
    mach am besten pro thread einen eigenen zufallszahlengenerator.
    initialisieren würde ich die mit rdtsc.

    aber vorher: du hast randomize() auch nur einmal zu programmstart aufgerufen? auf keinen fall immer vor rand() aufrufen, sonst hast du bei mehreren aufrugen in der selben sekunde auch die gleichen zufallszahlen.



  • Mr. ABC schrieb:

    Das Problem ist leider etwas komplexer. Ich habe mehrere Threads, die eine Funktion getRandomEntry aufrufen.

    btw, irgendwie gibt's nen trick, wie man durch multithreading zufallszahlen erzeugen kann. kannst ja mal danach googlen.
    🙂



  • Ich habe srand einmalig am Programmstart aufgerufen und danach nie wieder. Muss ich das für jeden Thread neu aufrufen? Das würde das Problem erklären.



  • Du könntest auch hier danach suchen. Marcus hat da mal eine sehr guten Beitrag geschrieben.



  • Unix-Tom schrieb:

    Du könntest auch hier danach suchen. Marcus hat da mal eine sehr guten Beitrag geschrieben.

    Nä. Da ging es um was anderes.


Anmelden zum Antworten