Создает ли «n * (rand() / RAND_MAX)» асимметричное распределение случайных чисел?

Я хотел бы найти неискаженный способ получения случайных чисел в C (хотя в лучшем случае я собираюсь использовать его для значений 0-20, и скорее только 0-8). Я видел эту формулу, но после нескольких тестов я не уверен, искажена она или нет. Любая помощь?

Вот полная используемая функция:

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

Я запустил ее, используя:

unsigned int iseed = (unsigned int)time(NULL);
srand (iseed);

Тот, что предложен ниже, отказывается работать для меня, я пробовал

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

, и он перестает работать и дает мне одно и то же число 50000 раз, когда я комментирую выход на печать

10
задан Robert 18 April 2012 в 23:37
поделиться