Zufallszahlen

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:

  1. Verknüpfung der Zufallszahlen mit irgendwelchen
    Zählern uder Timern. Die müssen natürlich autonom
    vom eigentlichen Programm oder Auslösepunkt für Zufallzahl
    sein. (Datum/Uhrzei bringt zumindesttens schon mehr Zufall
    als Du jetzt hast.
  2. Abfragen von Speicherzellen, die sich normalerweise auch nicht
    vorhersagen lassen.
  3. Ich habe früher mal Zufallszahlen mit Chaotischen Funktionen
    ausprobiert. Da sind die Ergebnisse der Iterationen auch
    nicht vorherzusehen, wenn man den Startwert nur geringfügig
    variiert (geht natürlich nur in Verbindung mit Methode 1.
    und 2.)
    Gruß Uwi

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