我有两个问题。
还有哪些其他方法可以在不使用 C++ 的情况下播种伪随机数生成器
srand(time(NULL))
?我问第一个问题的原因。我目前使用时间作为生成器的种子,但生成器返回的数字始终相同。我很确定原因是因为存储时间的变量在某种程度上被截断了。(我有一条警告消息说,“隐式转换失去整数精度:'time_t'(又名'long')到'unsigned int')我猜这告诉我,从本质上讲,我的种子直到明年才会改变发生。就我的目的而言,使用时间作为我的种子就可以了,但我不知道如何摆脱这个警告。
我以前从未收到过该错误消息,所以我认为它与我的 Mac 有关。它是 64 位 OS X v10.8。我也在使用 Xcode 编写和编译,但我在其他使用 Xcode 的计算机上没有问题。
编辑:在玩弄和研究更多之后,我发现了 64 位 Mac 存在的一个错误。(如果我弄错了,请纠正我。)如果您尝试让您的 mac 选择 1 到 7 之间的随机数time(NULL)
作为种子,您将始终得到数字 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++ 本身。