- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: kann mir jemand rand() erklären

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.04.2004
    Beiträge
    121

    kann mir jemand rand() erklären

    Anzeige

    Praxistest und DIY Projekte
    also wenn ich mir mit rand eiene zufallszahl generiere dann kommt nach dem reset immer wieder die gleiche zahl weis jemand warum das so ist oder ist das einfach ein bug
    #include <stdlib.h>
    #define RAND_MAX 0xff für 0 -255

    int r;
    r = rand();

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Rand() wird gern mißverstanden. Das ist eine immer gleiche (abh. vom Anfangswert SEED) Zahlenfolge, und der Witz daran ist nicht der Zufall, sondern die gleichmäßige Streuung über das Bereich.
    Den "Zufall" mußt du über SEED reinzaubern.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.04.2004
    Beiträge
    121
    hast vieleicht ein paar codeschnippsel oder nen kleines bsp

    tja hab mir gedacht rand wäre ähnlich der random(min,max) funktion in c#

    frag mich eigentlich warum ich c# in der schule hatte und nicht c++ würd glaub auch einiges einfacher machen

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.04.2005
    Ort
    Hamburg <-> Bremen
    Alter
    44
    Beiträge
    112
    Hi,
    hatte damit mal etwas mehr zu tun, raus gekommen ist die Initialisierung:
    Code:
    void rnd_init ()
    {
    	long tricks;
    	unsigned int seed;
    
    	// START set random seed
    	seed = time(&tricks) % 37;
    	srand (seed);
    	// END set random seed
    
    
    } //rnd_init
    hat sich ganz gut bewährt...

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.08.2004
    Beiträge
    159
    alternativ könnte man auch den aktuellen seed im eeprom speichern, um dann nach nem Neustart diesen weiterzuverwenden...

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.04.2005
    Ort
    Hamburg <-> Bremen
    Alter
    44
    Beiträge
    112
    Hi,
    wenn Du das auf dem uC machen moechtest wird mein prog wohl eher nciht funzen, da hier das mit der Time nicht wirklich geht...
    Wuerde mich dann eFFex anschliessen (aktuelles seed im eeprom). Fuer den Anfangswert (also bei erstinebtriebnahem) koenntest Dir den Wert vom PC ausgeben lassen und dann einfach uebertragen...

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.04.2004
    Beiträge
    121
    hab mir auch schon überlegt ob ich nicht selbst eine random funktion schreiben soll weil so etwas wäre auch für obotter und soh nicht schlecht
    wnn man iehn zufällige operationen ausführen lassen könte

    weis jemand wie ne random funktion grunzätzlich afgebaut sein muss
    und hat ne idee wie man soetwas realisieren kan

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.04.2004
    Beiträge
    121
    vieleicht könnte ich das mit einem timerinterupt lösen
    das unterprogramm von 0 -255 werte laden lassen und bei dem interupt der ja immer anders kommt weils nur ein unterprogramm ist den wert weitergeben aber denk mal da muss es was besseres geben

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.04.2005
    Ort
    Hamburg <-> Bremen
    Alter
    44
    Beiträge
    112
    Das letzte versteh ich jetzt nicht so ganz...
    Warum sollte ein interrupt immer anderskommen ?? und welcher Überhaupt ??
    Denke mal das mit einer eigenen rand() Funktion ist nicht wirklich einfach...
    Oder hat hier zufällitg jemand die Formel für die Berechnung einer zufälligen Zahl parat ??

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    45
    Beiträge
    269
    Moin moin!

    Ich glaube, dafuer nimmt man meistens mehrere MOD-Operationen (Divisionsrest) hintereinander. Also zum Beispiel irgendeinen Timer- oder Zaehlerwert, diesen durch irgendwas anderes (Integer) teilen und den Rest der Division weiterverwenden. Wenn man ein paar Berechnungen dieser Art hintereinander durchfuehrt und der Timer-Anfangswert nicht gerade immer den gleichen Wert hat, sind die Ergebnisse recht gut gestreut. Normieren kann man ja dann je nach Bedarf.
    Nils

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress