Hallo!
Ich versuche, mit der rand() Funktion in einer Schleife eine zufällige Folge von 0 und 1 (kann auch 6 und 9 sein, Hauptsache zwei ganze Zahlen) zu erzeugen.
Das brauche ich für die Funktion
int kauf()
{
int i,max=0,k=0,m=0,r;
for(i=0;imax)
max=k;
m=0;
}
if(r==1)
{
++m;
if(m>max)
max=m;
k=0;
}
}
if(k>m)
return k;
else
return m;
}
welche den zufälligen Kauf von zwei Produkten einmal täglich über Jahr simulieren soll. Leider liefert mir der rand() Aufruf nur nullen, so dass mein max (also die maximale Anzahl von gleichen Ergebnissen in Folge) immer 365 ist.
Wie krieg ich es hin, dass mein r zufällig genau 1 oder 0 ist?
Vielen Dank im Voraus,
Grüße
Hallo.
Wie krieg ich es hin, dass mein r zufällig genau 1 oder 0 ist?
r=rand()%2;
Habs nicht getestet, müsste aber so passen.
Liebe Grüße.
Alex
Hi!
Dannke! Klappt.
Allerdings habe ich auch noch die Möglichkeit (int)(rand()/(RAND_MAX+1.0)*2); gefunden. Wenn ich das Programm für 100000 Jahre laufen lasse, bekomme ich mit deiner Methode einen Mittelwert für max von 1,99…, mit der obigen allerdings 2,4…
Was ist nun richtiger?
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo
Dannke! Klappt.
Das Problem ist hierbei, daß die letzten Bits
nicht besoders zufällig verteilt sein werden.
IMHO besser, eine Partition (Mitte des Bereichs)
zu verwenden.
Allerdings habe ich auch noch die Möglichkeit
(int)(rand()/(RAND_MAX+1.0)*2); gefunden. Wenn ich das
Programm für 100000 Jahre laufen lasse, bekomme ich mit deiner
Methode einen Mittelwert für max von 1,99…, mit der obigen
allerdings 2,4… Was ist nun richtiger?
Was hast Du denn überhaupt vor?
Ich würde es so machen:
int kauf()
{
int i, max=0, k=0, m=0;
int RAND\_MAX\_HALBE = (RAND\_MAX+1)/2;
for(i=0; i max) max = m;
k = 0;
}
else {
if(++k \> max) max = k;
m = 0;
}
}
return k \> m ? k : m;
}
Grüße
CMБ