C程序 – srand()
可能重复:
建议初始化srand的方法?
在c中使用srand()时出现以下问题。
我在循环中调用srand(time(NULL)),但循环在1秒之前完成 ,每次调用rand()时我得到相同的值。
我怎么解决这个问题?
因为种子被绑定到时间(),这是自unix时代以来的秒数,基本上你给它相同的种子因为循环花了不到一秒钟。
你应该做的是以微秒为单位获得时间。 看看gettimeofday()如果你正在编写windows google microseconds win32 C,你需要将它从double转换为integerso只需这样做(unsigned int)double * 100.0f;
你为什么要在循环中调用srand
? 只需在程序开始时调用一次,然后多次调用rand
。
不要在循环中调用srand。 你为什么做这个?
只需在循环外初始化一次。
你只需要初始化srand()
一次,然后你只需要使用rand()
来生成随机数。 并生成随机数使用更好的随机算法?
如果要生成1到10之间的随机整数,则应始终使用高位,如下所示
j = 1 + (int) ( 10.0 * ( rand() / ( RAND_MAX + 1.0 ) ) );
srand
的目的是初始化随机数生成器。
其参数称为种子。 如果你给两次相同的种子,你可以期望随机数生成器(后续调用rand()
)返回相同的“随机”数字序列。
在你的情况下,你经常使用相同的值调用srand(直到第二次更改),因此rand()将始终返回相同的值。
你只需要调用一次srand
。
我在你的帮助下找到了答案。
struct timeval tv; gettimeofday(&tv,NULL); unsigned long time_in_micros = 1000000 * tv.tv_sec + tv.tv_usec;//find the microseconds for seeding srand() srand(time_in_micros);