我只是很好奇,单线程程序能否连续两次调用rand()
获得相同的返回值?
那么,这种说法会不会奏效?
assert(rand() != rand());
最佳答案
如果我们能找到一个可行的例子,那么您的问题的答案是"is"。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
unsigned int i;
for(i = 0; ; i++) {
int r = rand();
if (r == rand()) {
printf("Oops. rand() = %d; i = %d\n", r, i);
break;
}
}
return 0;
}
在装有Visual Studio 2010的Windows上打印
Oops. rand() = 3482; i = 32187
。编辑:
使用下面的版本来检测所有连续2个rand()调用返回相同值的序列。
C仅指定rand()应该返回“伪随机整数,范围为0到
RAND_MAX”和RAND_MAX应该至少为32767。
PRNG的质量,其实现方式或其他细节(例如,两个连续的rand()调用是否可以返回相同的值)都没有限制。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
unsigned int i;
int r1 = rand();
int r2 = rand();
for(i = 0; ; i++) {
if (r1 == r2) {
printf("Oops. rand() = %d; i = %d\n", r1, i);
}
r1 = r2;
r2 = rand();
}
return 0;
}