关于c++里面rand的奇技淫巧?
  • 板块灌水区
  • 楼主YCSluogu
  • 当前回复15
  • 已保存回复15
  • 发布时间2022/7/14 19:09
  • 上次更新2023/10/27 20:20:45
查看原帖
关于c++里面rand的奇技淫巧?
311721
YCSluogu楼主2022/7/14 19:09

我在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() 是返回一个浮点数。

2022/7/14 19:09
加载中...