Czy „n * (rand () / RAND_MAX)” powoduje wypaczony rozkład liczb losowych?

Chciałbym znaleźć nieskomplikowany sposób uzyskiwania liczb losowych w C (chociaż najwyżej będę go używał dla wartości 0-20, a najprawdopodobniej tylko 0-8). Widziałem tę formułę, ale po przeprowadzeniu niektórych testów nie jestem pewien, czy jest przekrzywiona, czy nie. Jakaś pomoc?

Oto pełna używana funkcja:

<code>int randNum() 
{ 
    return 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));
}
</code>

Użyłem:

<code>unsigned int iseed = (unsigned int)time(NULL);
srand (iseed);
</code>

Ten, który zasugerował poniżej, odmawia mi pracy

<code>int greek; 
for (j=0; j<50000; j++) 
{ 
greek =rand_lim(5); 
printf("%d, " greek); 
greek =(int) (NUM * (rand() / (RAND_MAX + 1.0))); 
int togo=number[greek]; 
number[greek]=togo+1; 
}
</code>

przestaje działać i daje mi tę samą liczbę 50000 razy, gdy komentuję printf.

questionAnswers(1)

yourAnswerToTheQuestion