Ufyljy| Цитата(man srand) | The rand() function returns a pseudo-random integer between 0 and RAND_MAX.
The srand() function sets its argument as the seed for a new sequence of pseudo-random integers to be returned by rand(). These sequences are repeatable by calling srand() with the same seed value.
If no seed value is provided, the rand() function is automatically seeded with a value of 1.
The function rand() is not reentrant or thread-safe, since it uses hid- den state that is modified on each call. This might just be the seed value to be used by the next call, or it might be something more elabo- rate. In order to get reproducible behavior in a threaded application, this state must be made explicit. The function rand_r() is supplied with a pointer to an unsigned int, to be used as state. This is a very small amount of state, so this function will be a weak pseudo-random generator. Try drand48_r(3) instead.
|
Другими словами, rand() генерирует псевдослучайные числа на основании определенной формулы (например, rnd = (seed = a*seed + b) >> 16, где a - некое простое число (помним со времен школы, что это такое?), b - некое нечетное число). В этой формуле помимо пары констант фигурирует одна переменная - seed. После каждого вызова rand() эта seed принимает определенное значение (например, результат вызова). Функция srand() записывает в seed то, что ты передал ей в качестве параметра. Изначально seed равна какому-то определенному числу. Поэтому вызов rand() каждый раз при старте программы будет выдавать одну и ту же последовательность чисел. Чтобы этого избежать, при старте программы однократно вызывают srand() и передают ей текущее время в секундах. Это делается так: Если тебе надо получить случайное вещественное (например) число от k до n, то надо вычислять по формуле:| Код | double rnd = k + (n-k) * rand() / ((double)RAND_MAX); |
time_t - это не константа, это тип. Тип переменной, хранящей время в секундах от начала Эпохи Unix (01.01.1970). А функция time() возвращает текущее универсальное координатное время (UTC) в секундах от начала Эпохи Unix. |