O “n * (rand () / RAND_MAX)” faz uma distribuição de números aleatórios distorcida?

Eu gostaria de encontrar uma maneira não-linear de obter números aleatórios em C (embora, no máximo, eu esteja usando para valores de 0 a 20 e, mais provavelmente, apenas 0 a 8). Eu vi essa fórmula, mas depois de executar alguns testes, não tenho certeza se está distorcida ou não. Qualquer ajuda?

Aqui está a função completa usada:

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

Eu semei isso usando:

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

O sugerido abaixo se recusa a trabalhar para mim eu tentei

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

e ele pára de funcionar e me dá o mesmo número 50000 vezes quando eu comento printf.

questionAnswers(1)

yourAnswerToTheQuestion