Macht "n * (rand () / RAND_MAX)" eine verzerrte Zufallszahlenverteilung?

Ich würde gerne eine ungezogene Methode finden, um Zufallszahlen in C zu erhalten (obwohl ich sie höchstens für Werte von 0 bis 20 und wahrscheinlicher nur für Werte von 0 bis 8 verwenden werde). Ich habe diese Formel gesehen, bin mir aber nach einigen Tests nicht sicher, ob sie schief ist oder nicht. Irgendeine Hilfe?

Hier wird die volle Funktion verwendet:

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

Ich habe es ausgesät mit:

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

Der unten vorgeschlagene weigert sich, für mich zu arbeiten, den ich versucht habe

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

und es funktioniert nicht mehr und gibt mir die gleiche Nummer 50000 Mal, wenn ich printf auskommentiere.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage