as for PRNGs (pseudo-random number generators) the Arduino random API functions are not ANSI C lib compatible, I use my own ones which are fine and stdlib compliant - at least I never encounterd issues so far:
#define LRAND_MAX 32767
#define srand(seed) randomSeed(seed)
#define rand() random(LRAND_MAX)
#define rando() ((float)rand()/(LRAND_MAX+1))
as I was not sure how RAND_MAX is processed by Arduino for AVR vs. ARM cpus I definied my own LRAND_MAX range.
you also may choose
#define LRAND_MAX 2147483647 // == LONG_MAX
instead.
rand() Return Value: An integer value >= 0 and <= LRAND_MAX.
http://www.cplusplus.com/reference/cstdlib/rand/
v0 = rand(); // v0 in the range 0 to RAND_MAX
v1 = rand() % 100; // v1 in the range 0 to 99
v2 = rand() % 100 + 1; // v2 in the range 1 to 100
v3 = rand() % 30 + 1985; // v3 in the range 1985-2014
vf = rando(); // vf (float) in the range 0<= vf <1
Anyway, the PRNG algs are all different and what is generated depends on the compiler and the targeted system - many PRNGs are awfully bad non-random actually.
Also, how the srand() function seeds the rand() function is obscured and depends on the rand implementation. It does nothing different but to transfer a start value to the rand() function.
For srand(seed), perhaps 0 is handled seperately to avoid division by zero, but that may vary to the actual PRNG which is used.
Note that a PRNG initialized by a certain fixed value will always generate identical pseudo-random series to infinity, which can be used for code testing purposes - but which will not make much sense for common PRNG use!
(edit:)
As Arduino boards don’t provide a system clock - I’m using my own “randomized rand() initialization” by
srand ( (unsigned int)( millis() + AnalogRead(A0) ) );
If I personally am uncertain about the system PRNG and so I want to play it safe, I’m usinig the Kernighan & Ritchie LCG (linear congruence generator) or, even better, a Mersenne Twister TT800.
HTH!