#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 3256 //获取0~N-1之间的随机数
int main()
{
int t;
printf("RAND_MAX = %d\n", RAND_MAX);
getchar();
srand((unsigned int)time((time_t *)NULL)); //用系统当前时间初始化随机数发生器的种子
do
{
t = rand();
printf("%d ", t%N);
printf("%d ", (int)( (double)t / ((double)RAND_MAX + 1) * N ) );
printf("%d", t / (RAND_MAX/N + 1) );
}
while(getchar());
return 0;
}
最直接的方法是:
rand() % N
但这个方法不好,因为许多随机数发生器的低位比特并不随机。一个较好的方法是:
(int)((double)rand() / ((double)RAND_MAX + 1) * N)
如果不希望使用浮点,另一个方法是:
rand() / (RAND_MAX / N + 1)
两种方法都需要知道RAND_MAX,而且假设N要远远小于RAND_MAX。