Srand

ceer
void srand(unsigned int seed);

Funkcja generuje zarodek (ziarno) seed ciągu liczb pseudolosowych, wykorzystywany przy wyznaczaniu liczb pseudolosowych za pomocą funkcji rand(). Początkowa wartość seed jest równa 1.

Brak wywołania funkcji generującej zarodek spowoduje, że przy każdym uruchomieniu naszej aplikacji "losowane" będą te same wartości.
Zazwyczaj jako argument funkcji srand() podaje się funkcję time(0), która zwraca ilość czasu, która minęła od 1 stycznia 1970 roku, w sekundach. Nietrudno zauważyć, że wartość ta będzie zawsze unikalna, co zwiększa losowość liczb do maksimum.

Przykłady użycia funkcji srand() zostały podane przy okazji omawiania funkcji Rand.


Zobacz też:

2 komentarzy

Aby zwiększyć dokładność do milisekund można zamiast time(NULL) podać GetTickCount() tj. liczba milisekund od włączenia systemu w Windows Wymaga #include <windows.h>

"Nietrudno zauważyć, że wartość ta będzie zawsze unikalna, co zwiększa losowość liczb do maksimum."

Tu się akurat nie zgodzę, bo wystarczy program:
int main()
{
srand(time(0));
printf("%d\n", rand()%20);
return 0;
}

wywołać kilkukrotnie w czasie mniejszym niż jedna sekunda i ilczby się powtórzą.
Niemalże idelanym byłoby gdyby generator był uzależniny od tego czasu ale w milisekundach, tylko czy się tak da?