- LiTime Speicher und Akkus         
Ergebnis 1 bis 4 von 4

Thema: frage bezüglich der funktion rand()

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    15.05.2006
    Ort
    Herxheim
    Beiträge
    13

    frage bezüglich der funktion rand()

    Anzeige

    Powerstation Test
    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

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.11.2004
    Ort
    München
    Alter
    36
    Beiträge
    447
    Hi,
    beudeutet das, dass ich ständig RAND_MAX neu definieren müsste?
    Nein.
    Es gibt den kleinen Trick mit Modulo (Rest vom teilen).

    Code:
    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

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    15.05.2006
    Ort
    Herxheim
    Beiträge
    13
    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

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    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() << ;

    Und modulo finde ich nicht unelegant, allerdings ist damit die Gleichverteilung flöten.
    Disclaimer: none. Sue me.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test