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.