C: rand() liefert immer die gleichen Zahlen?

Moin,

die Funktion rand() aus stdlib.h liefert erstaunlicherweise immer die gleichen Zahlen?! Setze ich z. B. die Werte eines Arrays mit rand(), dann haben die einzelnen Elemente bei jedem Durchlauf des Programms wieder die Werte vom vorherigen Lauf. Ist das zwangsläufig so? Wirklich randomisiert wäre das ja nicht ??!

thx
moe.

Um verschiedene Zahlen zu erhalten muß die Random funktion mittels srand() erst initialisiert werden.
Beispielsweise durch:

srand((unsigned)time(NULL));

Dann sollte rand() auch verschiedene Werte liefern.

Grüße

B

Hallo

B.Joop hat Dir weiter unten schon den richtigen
Wink gegeben, ich möchte das nur noch etwas erläutern …

die Funktion rand() aus stdlib.h liefert erstaunlicherweise
immer die gleichen Zahlen?! Setze ich z. B. die Werte eines
Arrays mit rand(), dann haben die einzelnen Elemente bei jedem
Durchlauf des Programms wieder die Werte vom vorherigen Lauf.

So ist es. Das nennt sich ‚pseudorandom‘.

Ist das zwangsläufig so? Wirklich randomisiert wäre
das ja nicht ??!

Es geht nur darum, dass die Zahlenfolge bestimmten
„Tests“ auf „Randomität“ standhält. Und das tut sie.

Wenn Du in der Sequenz immer wo anders anfangen
möchtest, schreibst Du immer zuerst in Dein
Programm:

 #include 

 int main()
 {
 #ifdef MY\_DEBUG
 srand( (unsigned)time(NULL) );
 #else
 srand( 12345 );
 #endif

 ...

Oder sowas ähnliches.
Manchmal möchte man auch die
selben Zahlen haben (für Testläufe).

siehe auch: http://de.wikipedia.org/wiki/Pseudozufallszahl

Grüße

CMБ

Hallo Moe,

das is so „by design“, auch andere Implementierungen liefern keine echten Zufallszahlen, sondern eine nur eine gleichverteilte Folge. Das hat ja auch Vorteile. Sozusagen deterministischer Zufall.

Als erstes kann man den Anfangswert anders setzen (mit seed), dann ist die Folge eigentlich die gleiche, fängt aber sozusagen an einer anderen Stelle an (sie ist sowieso endlich und zyklisch).

Braucht man echte Zufallszahlen, muss man sie aus echt zufälligen Ereignissen ableiten, oft wird die Betätigung der Tastatur durch den User herangezogen. So richtig zufällig ist die aber auch nicht, man muss schon sehr sorgfältig vorgehen und die Zeit zwischen den Tastendrücken mit hoher Auflösung messen und modulo reduzieren, damit man sich keine unerwünschten Regelmässigkeiten einfängt.

Eine echte Lösung wäre eine kleine radioaktive Quelle in jedem PC und ein Zähler…

Gruss Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo !

Eine echte Lösung wäre eine kleine radioaktive Quelle in jedem
PC und ein Zähler…

Oder man holt sie aus dem Internet:
http://www.random.org/
http://www.fourmilab.ch/hotbits/
http://www.randomnumbers.info/

mfg
Christof

Danke.
.