C程序 - 函数srand()[重复]C程序 - 函数srand()[重复](C program -

2019-05-12 11:48发布

可能重复:
推荐方式初始化函数srand?

我在c中使用srand()函数时,有以下问题。

我呼吁在一个循环函数srand(时间(NULL)),但1的环完成每次我打电话兰特时间()我得到相同的值。

我该如何解决这个问题?

Answer 1:

因为种子被绑定到时(),它是自秒Unix时间戳,基本上你因为循环时间不超过第二给它相同的种子。

你应该做的就是在几微秒的时间。 看看函数gettimeofday(),如果你的编码Windows适用的Google微秒的win32 C,你介意需要将其从双转换为integerso只是这样做(unsigned int类型)双* 100.0f;



Answer 2:

你为什么叫srand在一个循环? 只需在程序开始调用它一次,然后调用rand任意次数。



Answer 3:

不要在循环调用函数srand。 你为什么做这个?

只是初始化外循环一次。



Answer 4:

你只需要初始化srand()一次,那么你只需要使用rand()来生成随机数。 并生成随机数使用更好的随机算法?

如果你想生成1到10之间的随机整数,你总是应该通过使用高序位做到这一点,如

j = 1 + (int) ( 10.0 * ( rand() / ( RAND_MAX + 1.0 ) ) );


Answer 5:

srand的目的是初始化随机数发生器。

它的参数被称为种子。 如果你给了相同的种子两次,你可以期望的随机数发生器(后续调用rand()返回“随机”相同的数字序列。

在你的情况,你会不断地调用具有相同的值(直到第二个变化)函数srand,所以兰特()总是会把你返回相同的值。

你只需要调用srand一次。



Answer 6:

我发现你的帮助的答案。

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


文章来源: C program - srand() [duplicate]
标签: c srand