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.