mehrere zufalszahlen gleichzeitig erzeugen ?



  • hallo,
    ich muss für eine Simulation eine große Menge von Zufallsdaten erzeugen,
    bisher würfel ich jedes Byte einzelnd aus ( x=(rand()%256); ) .
    Bei 1 Mio Bits sind das aber 125000 Bytes, also 125000 Zufallszahlen.

    Ich dachte vielleich , da die rand Funktion sowieso int zurückgibt, kann ich die ersten 8 Bit als ein Zufallszahl, die nächsten 8 Bit als zweite Zufallszahl usw benutzten.
    (Ich hab grad gelesen das int 4 Byte sind, hab aber mal gehört dass es auf den rechner ankommt)

    wenn das irgendwie ginge, müsst ich nur noch 125000\4 mal würfeln.

    Ich denk aber dann sind die zufallszahlen nicht mehr richtige zufallszahlen ?
    bei allen zahlen unter 256 sind die drei anderen Bytes null, dass passt ja gar nicht .....

    für tipps oder andere gedanken offen,
    flix



  • rand liefert int, welches unter gängigen Umgebungen häufig 4 Byte groß ist.
    Genaueres sagt einem sizeof(int).

    Was dein Zufallszahlenproblem angeht, würde ich dir den Artikel von Marc++us im Magazin empfehlen.
    Er behandelt das Thema sehr ausführlich.



  • danke,
    den Artikel kenn ich (ausnahmsweise) schon, sthet aber nichts zu meiner Problematik drinn.

    Danke
    flix



  • Die Zufallszahlen sind sowiso keine Zufallszahlen! 😉 Und du kannst ja einfach Prüfen ob das höchste Oktett Bits gesetzt hat, wenn ja ist die Zahl groß genug und du kannst sie aufsplitten.



  • dafür würde ich auch kein rand() nehmen, weil ja rand nur bis RAND_MAX (32k) geht.
    Nimm doch so einen algo wie er in marc++us' artikel benannt ist. Boost bietet vielleicht was an, bin mir da grad nich sicher.
    Die erzeugen dann echt 32Bits, dann hast du gleich 4 Byte mit einem rutsch



  • hi,
    nimm den Mersenne Twister von Makoto Matsumoto, der kann alles.
    vg tesu


Anmelden zum Antworten