我正在编写一个代码,对一组4个数字执行随机扫描。我想扫描10000点(数百万之后)。我刚刚了解了rand(),所以这里是相关部分:
int numPoints = 10000;
double A,B,C,D;
for (i=0; i<=numPoints1;i++) {
srand ( time(NULL) );
A = rand() % 500 + 100;
B = rand() % 500 + 100;
C = rand() % 100 - 100;
D = rand() % 5 + 2.5;
然后将这四个变量输入函数(A,B,C,D)。 代码在循环内执行一些检查和计算。
}
但是,我在输出文件中多次注意到,选择了相同的A,B,C,D组。
问:有关如何改善情况的任何建议?
答案 0 :(得分:3)
您应该将呼叫移出srand
。像这样:
srand(time(NULL));
for (i = 0; i <= numPoints1; i++)
{
...
}
发生的事情是您每次迭代都会重新初始化随机数生成器。我记得,time
将时间作为秒数返回。因此time(NULL)
每秒只会更改一次,这意味着您将使用相同的种子多次播种随机数。
尽管如此,这并不能保证不会重复一组数字。但是,它会使复制品的可能性大大降低。