rand()



  • Hi,

    ich möchte einen ganzzahligen Zufallswert (32 Bit) erzeugen. Bekanntlich ist RAND_MAX allerdings (unter Windows) als 0x7fff definiert. Gibt es eine elegantere Möglichkeit, eine solche Zahl zu erzeugen, als diverse verschiedene Zufallswerte mit Shift & co. zusammenzubasteln? Boost bietet zwar diverse Klassen zum Thema Random, allerdings erscheinen mir diese wie mit Kanonen auf Spatzen geschossen... 🙄

    In diesem Forum schreibe ich übrigens in der Hoffnung, jemand könne mir diesbezüglich einen Tipp geben, dies C++ spezifischer zu realisieren als mit <cstdlib>.



  • Was spricht gegen boost?
    Warum ist rand() nicht C++ spezifisch genug? OK, es gibt rand() auch in C, aber das ist ja kein Nachteil, oder?

    Warum nicht wirklich einen 32Bit Wert durch 2 16Bit Werte darstellen? Ich finde das eigentlich ganz OK...



  • Nun ja, ich will wegen ein paar Zufallswerten, die keiner statistisch "perfekten" Verteilung bedürfen nicht die Boost einbinden müssen.

    Ich war mir nicht sicher, ob rand() in C++ obsolet ist - wenn weiterhin gebräuchlich, umso besser. 🙂

    RAND_MAX umfaßt zwar nur 15 Bit, aber mittlerweile ist die Sache sowieso gegessen: Ich brauchte eigentlich nur einen zufällig 24-Bit-Wert, weshalb ich an eine "modernere" 32-Bit-Funktion dachte. Hab diesen Wert nun aus 3x rand() & 0xff erzeugt - Geschwindigkeit ist nicht von Belang.

    Thx anyway!



  • btw. die hohen bits sind bei Modulo-Generatoren immer besser als die niedrigen



  • Ja, ich weiß, aber ich verwende dennoch die niederen Bits, da ich nicht weiß, wie RAND_MAX auf jedem System definiert ist, auf das mein Projekt irgendwann mal portiert werden soll (Kann ja nicht immer von 0x7fff ausgehen).


Anmelden zum Antworten