Forum: PC-Programmierung srand() Funktion in C


von Matthias (Gast)


Lesenswert?

Hallo,

Laut (englischer) Wikipedia und anderer Internetquellen handelt es sich 
bei srand() um einen Kongruenzgenerator mit der Formel:
a,c und m sind konstant x0 ist der Startwert (seed)

Meine Frage:
Steckt hinter srand() wirklich obiger Kongruenzgenerator?
Wenn Ja, wo ist das definiert und welche Werte haben a, c und m?

Danke
Matthias

von Kaj (Gast)


Lesenswert?

srand() findest du in der stdlib.h
1
_CRTIMP void   __cdecl srand(_In_ unsigned int _Seed);

Grüße

von seed (Gast)


Lesenswert?

Hinter srand steckt eher das

von chris (Gast)


Lesenswert?

Hier eine standard Srand Funktion:
Also die obige Formel scheint zu stimmen.
1
static unsigned long int next = 1;
2
3
int rand(void) // RAND_MAX assumed to be 32767
4
{
5
#if 0
6
    return (unsigned int)((next = next * 1103515245 + 12345)/65536) % 32768;
7
#else
8
    return (unsigned int)((next = next * 1103515245 + 12345)>>16) % 0x7fff;
9
#endif
10
}
11
12
void srand(unsigned int seed)
13
{
14
    next = seed;
15
}

von DirkB (Gast)


Lesenswert?

chris schrieb:
> #else
>     return (unsigned int)((next = next * 1103515245 + 12345)>>16) %
> 0x7fff;

Das % muss ein & sein.

von Matthias (Gast)


Lesenswert?

Super das ist es

hat mir sehr geholfen weitere Quellen zu finden.
Ausführlichere Erläuterungen zu der Wahl a,c und m sowie bessere 
Alternativen gibt es hier (S. 276ff)
http://astronu.jinr.ru/wiki/upload/d/d6/NumericalRecipesinC.pdf

Gruß
Matthias

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.