rand() jest najczęściej bardzo słabym jednowymiarowym generatorem liczb losowych, co jest wymuszone zgodnością ze standardem POSIX. Jeżeli nawet pojedyńcze wywołanie tej funkcji można traktować jako losowe, to złożenia dwóch lub więcej wywołań nie przechodzi odpowiednich testów, ze względu na to, że używając rand() kolejna wartość jest ściśle zależna od 4 bajtowego stanu (unsigned int), więc okres tego generatora wynosi maksymalnie 2^32. Tym samym jakość liczb wygenerowanych wszystkimi powyższymi metodami nie odbiega od:
int mul = 1000000 / 32767;
int rand = mul * rand();
(przy założeniu, że RAND_MAX==32767 oraz że stan jest 2 bajtowy)
Dodatkowo te xorowanie na pewno nie polepszy właściwości wygenerowanych liczb, a może nawet je pogorszyć.
W poważnych zastosowaniach należy użyć lepszych generatorów, np. random() w C (stdlib rozszerzenie POSIX) lub szeregu generatorów z <random>(boost, c++0x). Przykładowo używając Mersenne Twister można złożyć nawet 623 pojedyńcze 32. bitowe liczby w większą, pseudolosową liczbę. Polecam lekturę drugiego tomu Knutha, pierwsza część bardzo dobrze i wyczerpująco omawia problem używania liczb pseudolosowych