我在linux下发现了一点比较奇怪的事情。如果我们在初始化种子的时候用 time(0),多次执行这个随机数程序可能会因为时间差过小而种子一样。
但是比较奇特的是,我把 time(0) 换成 clock() 后,比如如下代码
random.cpp:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <random>
#include <ctime>
using namespace std;
int main() {
mt19937_64 e(clock());
srand(clock());
uniform_int_distribution<int> a(1, 10);
cout << a(e) << " " << (rand() % 10) + 1 << endl;
return 0;
}
然后短时间多次执行这个奇妙的程序:
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 10; i++) {
system("./random");
}
return 0;
}
输出:
1 5
8 3
3 9
1 1
5 5
4 3
10 5
3 9
6 9
5 7
?!?!?!?!?!!!!!
但是,如果我初始化随机数是利用 time(0)……那么……
1 9
1 9
1 9
1 9
1 9
1 9
1 9
1 9
1 9
1 9
所以,这是不是 windows 和 linux 的差异?还是说这真的是 clock() 的奇妙用法?我知道 clock() 是返回一个浮点数。