我在使用这段代码时遇到了一些问题:
for (long long int loop = 0; loop < 50000000; loop++)
{
srand( (unsigned)time(NULL) ); // set the seed
int r = abs(rand()); // stores the random seed for this loop
int res = loop + r - r * r / r; // random operations with the loop number and the random seed.
cout << "Loop number: " << loop << ". " << "Result: ";
cout << res << endl;
}//this was missing
如果您运行该代码,您可以在控制台中非常清楚地看到它的输出每隔几秒才进行一次计算。这是怎么回事?每个循环的数字应该完全不同,因为它是用随机数进行计算的。相反,每运行 x 个循环,数字就会发生变化,然后它似乎只会在这些时间之间增加,而实际上是在进行数学运算。
我是否需要指定我希望循环等到一切都完成后再继续?
最佳答案
因为您正在使用时间种子在循环中执行 srand
。 time()
的粒度以秒为单位,因此在一秒过去之前,它将返回相同的种子,因此返回相同的随机数。在循环外执行 srand
。
用 srand
为 rand 函数播种的要点是每次运行程序时生成的随机数序列都不同。您的程序中只需要一个 srand
。
顺便说一句,rand()
总是返回一个非负数,所以 abs
是无用的。请注意 r
可以是 0
,并且您确实除以 r
,这可能具有未定义的行为。为了安全起见,执行 r = rand()+1
。
关于C++ for循环不等待完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27546059/