C++ 时间(NULL)返回所有相同的值

C++ 时间(NULL)返回所有相同的值,c++,random,time,random-seed,C++,Random,Time,Random Seed,我想用随机数填充一个数组(我使用cuRand),但当我注意到虽然看起来是随机的,但每次我运行代码(我说的是不同的执行)时,它们总是相同的数(不是那么随机的),这是多么令人惊讶啊。我继续检查我的种子,我总是收到相同的值,即1462615827。我试图使它不带符号,我收到了完全相同的值。在这田园诗般的代码中可能会发生什么 unsigned long seed1 = unsigned(time(NULL)); printf("%lu\n", seed1); //The same number is

我想用随机数填充一个数组(我使用
cuRand
),但当我注意到虽然看起来是随机的,但每次我运行代码(我说的是不同的执行)时,它们总是相同的数(不是那么随机的),这是多么令人惊讶啊。我继续检查我的种子,我总是收到相同的值,即
1462615827
。我试图使它不带符号,我收到了完全相同的值。在这田园诗般的代码中可能会发生什么

unsigned long seed1 = unsigned(time(NULL));
printf("%lu\n", seed1); 
//The same number is printed every execution
编辑:最奇怪的事情发生了。我把工作保存在我的网络磁盘上,然后重新启动我的电脑。它不会工作(我想主板崩溃了)。我只是继续在另一台电脑上工作,种子被完美地拿走了。那么,这可能是硬件故障吗?

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

如果该值不大于有符号类型所能表示的值,则从无符号转换将产生相同的值,正如您所观察到的。这是意料之中的


我继续检查我的种子,我总是收到相同的值,即
1462615827

这大约是你发布问题前的4分钟。我假定,除了在那个特定的时刻,您实际上并没有尝试执行您的程序


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

在您展示的代码中,您的种子是相同的,这非常有意义<典型系统上的代码>时间仅每秒更改一次,获取当前时间不需要一秒钟。但是您的问题文本表明,在更改代码、重新编译并再次运行之后,您甚至得到了相同的时间。那将是非常不寻常的。如果真的是这样的话,你能编辑你的问题来关注这个问题吗?我会检查
errno
的值。在我看来这是不可复制的“我开始检查我的种子,我收到的都是相同的值,它是1462615827”,所以他意识到没有什么规定时间必须签名或不签名,只是它必须是整数类型。如果
time()
不成功,它将返回
(time\u t)-1
,这是什么要求。无论哪种方式,OP的输出都表明这与无符号/有符号/溢出无关。@user6292850关于时间的说法是正确的,尽管我不明白你的意思。OP想知道为什么他们的种子是相同的,即使他们将无符号整数转换为有符号整数。唯一不发生这种情况的情况是,无符号值不能用有符号类型表示。@user207933 OP询问为什么每次执行时总是收到相同的值,即1462615827。所以他的问题是不可复制的,你们的答案是毫无意义的。@granmirupa他们也在问这个问题。我现在已经给出了一个假设性的答案,虽然不可能证实。