Probleme mit Zufallszahlen
-
Hallo zusammen,
ich habe ein Problem bei der Generierung von Zufallszahlen. Ich bekomme da immer die gleichen raus.
hier mal mein code, wie ich die zahlen erzeuge:
int VerTyp= 0; char typ; srand(( unsigned )time( NULL )); // Startpunkt setzen VerTyp= rand() % 2; // Zufallszahlen von 0 - 1 erzeugen if(VerTyp == 0) typ= 'A'; if(VerTyp == 1) typ= 'B';Wenn ich das z.B. als Schleife laufen lasse, bekomme ich immer wieder die fünf gleichen Zahlen, bzw. hier würde ich dann ja rausbekommen, dass typ z.B immer gleich A ist.
kann mir da jemand weiterhelfen, dass ich da verschiede Zahlen raus bekomme.
Vielen Dank
gruß
Foxy
-
Rufe srand() nur einmal vor der Schleife aufrufen.
Gruß
-
dann bekomme ich für den ersten z.B. A und für die weiteren 4 B bei 5 Schleifen durchläufen.
-
Und? Wenn Du abwechselnd A und B haben willst, dann implementier es so. Wenn Du was zufälliges haben willst, dann wunder Dich auch nicht, daß zufällig einmal A und dann 4mal B rauskommt.
Oder passiert das bei jedem Programmdurchlauf? Dann solltest Du mal Deinen kompletten Code zeigen.
-
bei einem weiteren durchlauf hate ich 5mal b und bei einem dritten 5 mal a undbei einem 4. wieder 5 mal b:
klar, kann es sein, dass es mal vorkommt, dass alles a oder b ist, aber das kommt ja immer vor.hier mal mein code:
so wird die funktion random() aufgerufen:..... int Anzahl= 5; for(ii= 0; ii < Anzahl; ii++) { typ= random(ii); ..... }char random(int ii) { int VerTyp= 0; char typ; if(ii == 0) srand(( unsigned )time( NULL )); VerTyp= rand() % 2; if(VerTyp == 0) typ= 'A'; if(VerTyp == 1) typ= 'B'; std::ofstream file; file.open("typ.txt",std::ios_base::app); if ( !file ) { TRACE( "Can't open file" ); /ausgegeben } file << "Typ: " << typ << '\n'; return typ; file.close(); }
-
Vielleicht so:
typ = ((rand()/RAND_MAX) < 0.5)?'A':'B';
-
da kommt bei drei durchläufen immer A heraus
-
Dann nimm halt Boost.Random, das hat auch einen Zufallsgenerator für zwei Werte. Wenn du halbwegs "echte" Zufallszahlen haben willst ist der lineare Kongruenzkrams aus der cstdlib eh nicht zu gebrauchen.
-
.filmor schrieb:
Vielleicht so:
typ = ((rand()/RAND_MAX) < 0.5)?'A':'B';Das kann nichts werden wegen Ganzzahl-Arithmetik - d.h. du müsstest entweder rand() oder RAND_MAX nach double casten.