Funkcija čuva interno neki broj, i taj broj se menja svaki put kad se pozove funkcija. Povratna vrednost funkcije je izvedena iz tog broja koji se menja. Taj broj se postavlja sa ovom funkcijom srand. Ako se ne postavi onda se računa kao da je postavljen na neku uvek istu vrednost (mislim da je 1).
Evo implementacija funkcija rand i srand u Visual Studiu 2008:
Code (c):int rand (void)
{
_ptiddata ptd
= _getptd
();
return( ((ptd
->_holdrand
= ptd
->_holdrand
* 214013L + 2531011L) >> 16) & 0x7fff );
}
void srand (unsigned int seed
)
{
_getptd
()->_holdrand
= (unsigned long)seed
;
}
Kao što vidiš slučajni brojevi dobijeni funkcijom rand nisu zaista slučajni. Čitav niz slučajnih brojeva definisan je početnim brojem. Pošto su brojevi samo naizgled slučajni, ali nisu zaista, zovu se pseudo-slučajni brojevi.