PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : frage bezüglich der funktion rand()



roflomfg
04.06.2006, 18:16
hey
also is eigentlich ne verdammt simple frage ^^
hab ein programm geschrieben bei welchem ich 2 verschiedenen variablen einen randomwert zuweisen muss
mein problem liegt darin dass in der datei stdlib.h die obergrenze des bereiches durch den wert RAND_MAX begrenzt wird - dadurch is der wertebereich immer gleich groß
allerdings benötige ich bei der einen zuweisung einen wertebereich von 0 bis 75000 un bei der anderen will ich nur 1 oder 2 zuweisen
beudeutet das, dass ich ständig RAND_MAX neu definieren müsste?

mfg sebastian

PasstScho
04.06.2006, 20:21
Hi,

beudeutet das, dass ich ständig RAND_MAX neu definieren müsste?
Nein.
Es gibt den kleinen Trick mit Modulo (Rest vom teilen).



uint32_t = (((uint32_t)rand() << 16) | (uint32_t)rand()) % 75001;

uint8_t = (uint8_t)rand() % 2;


Mit Modulo wird einfach gesagt einfach die überflüssige Zahl so kleingeschnitten dass sie genau in die "Grenze" passt.
RAND_MAX ist normal auf 65535 wenn ich mich recht erinnere.
Deshalb musst du eine Zufallszahl die größer ist selber aus zwei kleinen zusammensetzen.

MfG Alex

roflomfg
05.06.2006, 13:34
hey danke

naja an die modulo lösung hatte ich auch schon gedacht
-dachte allerdings dass es eine "elegantere lösung" zu diesem problem gibt

mfg sebastian

SprinterSB
05.06.2006, 21:55
RAND_MAX ist ein Makro, das dazu dient, magische Zahlen wie 65535 aus dem Code zu halten. Es kann incht umdefiniert werden (bzw. hat nicht den gewünschten Effekt).

Eine 24-bit Zufallszahl bekommst du mit

uint32_t x = (uint32_t) rand() ^ (rand() << 8);

Und modulo finde ich nicht unelegant, allerdings ist damit die Gleichverteilung flöten.