【发布时间】:2014-07-22 21:24:40
【问题描述】:
使用srand(time(NULL)) 似乎过于确定。例如,当我运行std::cout << rand() % 9000 时,我得到4275。当我再次运行它时,我得到4311。它也是基于时间的。
【问题讨论】:
-
那只是碰巧他们彼此如此接近。当您的号码是随机的时,就会发生这种情况。
-
另外,既然您要求使用 C++,您可能需要考虑使用 the new random number library。
-
你认为这是确定性的吗?我挑战你猜下一个数字。
-
@MartinKonecny,这不是机会,我自己在微软实现
rand时遇到了同样的问题。使用的公式显示了种子和产生的第一个值之间的明确相关性。 -
为了生成高熵种子值本身,使用
std::random_device类是正确的,它是新<random>库的一部分。对于较旧的编译器(C++11 之前),您可以使用TR1 random library 或Boost.Random,它们几乎相同。否则,您也可以从/dev/randomor/dev/urandom或非 Unix 等效项 (?) 中读取。