【发布时间】:2013-05-18 11:40:10
【问题描述】:
我有一个 C 语言程序,它使用 0-999 的随机数创建一个由 1000 个整数组成的数组,然后对该数组执行某种算法。为了测试算法的运行时间,我尝试运行程序 10000 次,但每次运行它的数组对于几个数组都是相同的,然后它会改变。我已经使用srand() 函数用当前时间喂种子,但它仍然没有帮助。
rand() 是否有替代解决方案或解决此问题的方法?
我的功能是:
void getarray(int *ptr1, int size, int option){
int n;
srand(time(NULL));
for(n=0; n<size; n++)
*(ptr1+n) = *(ptr2+n)= rand()%1000;
}
提前致谢!
【问题讨论】:
-
你应该只调用 srand 一次:在程序启动时。
-
正如@Pubby 所说。否则,由于时间差太小,您最终会多次播种相同的种子。这将导致您的随机序列从伪随机数字序列中的完全相同的点开始。
-
我试图找到最好的;一些明显的重复是由于根本没有调用
srand()而引起的问题。 Recommended way to initialize srand? 的可能重复项 -
rand()%1000 不是好的做法,它不提供均匀分布。有更好的选择 - arc4random_uniform。不过这是针对 Unix 的