time(NULL)返回所有相同的值

时间:2016-05-07 10:14:20

标签: c++ random time random-seed

我想用随机数填充数组(我使用cuRand),但是当我注意到虽然显然是随机的,但每次我运行代码时都会感到惊讶(我说的是不同的执行)他们在那里,总是相同的数字(不是那么随机)。我继续检查我的种子,我收到的值始终是1462615827。我试图让它无符号,我收到完全相同的值。这个田园诗般的代码可能会发生什么?

unsigned long seed1 = unsigned(time(NULL));
printf("%lu\n", seed1); 
//The same number is printed every execution

编辑:最奇怪的事情发生了。我将工作保存在网络磁盘上,然后重新启动了我的电脑。它不会工作(我认为主板崩溃)。我只是继续在另一台PC上工作,种子被完美地拿走了。那么,它可能是硬件故障吗?

1 个答案:

答案 0 :(得分:3)

time()不会返回随机数。它返回当前的日历时间。通常,该值表示自纪元以来的秒数(通常为UTC时间1970年1月1日00:00)。

如果该值不大于可以用有符号类型表示的值,那么从无符号转换将产生相同的值,如您所观察到的那样。这是预期的。

  

我继续检查我的种子,我收到的值始终为1462615827

在您发布问题之前大约4分钟。我认为你实际上没有尝试过执行你的程序,除非是在那一秒钟。

如果你这样做,那么这可能是操作系统或硬件问题。