gpt4 book ai didi

c++ - 播种随机数生成器 C++

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:46 24 4
gpt4 key购买 nike

<分区>

我有两个问题。

  1. 在不使用 srand(time(NULL)) 的情况下,还有哪些其他方法可以在 C++ 中为伪随机数生成器提供种子?

  2. 我问第一个问题的原因。我目前使用时间作为生成器的种子,但生成器返回的数字始终相同。我很确定原因是因为存储时间的变量在某种程度上被截断了。 (我有一条警告消息说,“隐式转换失去整数精度:'time_t'(又名'long')到'unsigned int')我猜这告诉我本质上我的种子要到明年才会改变发生。出于我的目的,使用时间作为我的种子会工作得很好,但我不知道如何摆脱这个警告。

我以前从未收到过该错误消息,所以我认为它与我的 Mac 有关。它是 64 位 OS X v10.8。我也是用Xcode写编译的,但是我在其他电脑上用Xcode没问题。

编辑:在进一步研究和研究之后,我发现了 64 位 Mac 存在的一个错误。 (如果我弄错了,请纠正我。)如果您尝试让您的 mac 使用 time(NULL) 作为种子选择 1 到 7 之间的随机数,您将始终得到数字 4。总是。我最终使用 mach_absolute_time() 为我的随机发生器设定了种子。显然,这消除了我程序的所有可移植性……但我只是一个爱好者。

编辑2:源代码:

#include <iostream>
#include <time.h>

using namespace std;

int main(int argc, const char * argv[]) {

srand(time(NULL));

cout << rand() % 7 + 1;

return 0;
}

我再次运行这段代码进行测试。现在它只返回 3。这一定与我的计算机有关,而不是 C++ 本身。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com