¿Hace “n * (rand () / RAND_MAX)” una distribución de números aleatorios sesgada?

Me gustaría encontrar una forma sencilla de obtener números aleatorios en C (aunque a lo sumo lo usaré para valores de 0-20, y probablemente solo de 0-8). He visto esta fórmula pero después de ejecutar algunas pruebas no estoy seguro de si está sesgada o no. ¿Alguna ayuda?

Aquí está la función completa utilizada:

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

Lo sembré usando:

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

El que se sugiere a continuación se niega a trabajar para mí lo intenté

<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>

y deja de funcionar y me da el mismo número 50000 veces cuando comento printf.

Respuestas a la pregunta(1)

Su respuesta a la pregunta