Hi
Wie kann ich (unter C++) Zufallszahlen bestimmen, wenn mir die gelieferte Zufallsfunktion nicht zufällig genug ist,–> bei jedem Start des Programmes sind die gleihen Werte enthalten.
Danke
MfG Dennis
Sorry für double-Posting, es ist dringend
Hi
Wie kann ich (unter C++) Zufallszahlen bestimmen, wenn mir die gelieferte Zufallsfunktion nicht zufällig genug ist,–> bei jedem Start des Programmes sind die gleihen Werte enthalten.
Danke
MfG Dennis
Sorry für double-Posting, es ist dringend
Hallo,
ichbin zwar kein Softi, aber falls es Dir hilft,
habe ich ein paar Vorschläge:
Vielleicht hilft Dir die folgende Misch-Prozedur ein bisschen. Es handelt sich um den Mischvorgang eines Kartenspiels aus 52 Karten für eine Patience. Das Mischen mit der Hand wird nachgebildet. Der Ausgangsstapel „Urspiel“ ist noch strikt geordnet! Der Anfangswert der Zufallsvariablen wird aus der Rechnerzeit geholt, wie Du aus der zweiten Zeile des Anweisungsteils ersiehst. Die letzten Stellen sind die Nanosekunden (ich hoffe, ich irre mich da nicht, ist schon lange her, dass ich mit UNIX/C zu tun hatte), die hinreichend zufällig sind bezüglich des Startpunktes. Die weitere Prozedur zur Zufallszahlengewinnung habe ich irgendwo her, ist wohl nicht schlecht.
/*================================
** Karten mischen
**================================
*/
#define A 261 /* Konstanten fuer’s Mischen */
#define C 5231723
#define M 52000
#define D 100
#define ZZDIV 5200
void mischen (void)
{
int nd, iz1, iz2, iq; /* Anzahl Durchlaeufe, Index Ziel- und Quellstapel */
int zz, zz10; /* ZufallsZahl, ZufallsZahl abgebildet auf 10 Karten */
struct Spiel hilfsspiel;
/*--------------------------------------------------*/
AktSpiel = UrSpiel;
zz = (int) time (NULL);
zz = zz % 1000000;
for (nd=0; nd 0)
{ zz = (zz*A + C) % M;
zz10 = zz / ZZDIV + 1;
/* abbilden auf max. Anzahl umzuschichtender Karten */
if (zz10 > iz1)
zz10 = iz1;
/* das kann am Ende eines Stapeldurchgangs passieren, wenn weniger
** Karten als die Zufallszahl uebrigbleiben
*/
iz2 = iz1 - zz10;
while (iz2