【发布时间】:2016-10-05 12:18:41
【问题描述】:
如何为随机生成器播种,以便在不同的处理器上拥有不同的数字序列?
我的第一次尝试是使用处理器的排名作为种子。
然后我发现srand(0)给出与srand(1)相同的序列。
目前,我正在这样做:
srand(time(NULL) + rank)
这是一个好的方法吗?或者,还有更好的方法? 谢谢
【问题讨论】:
-
把时间当作种子是很常见的,你有什么理由不能这样做?
-
如果你有 C++11 或更高版本,你应该考虑使用
<random>中的生成器 -
嘿@UKMonkey 我尝试只使用
time(NULL),但有时所有触发都得到相同的种子,这是我不想要的。我希望每个处理器每次都有自己的种子。 -
std::random_device旨在使用硬件支持的非确定性随机性(如果可用作种子)(例如,在较新的 Intel 处理器上可用)。可以使用std::random_device::entropy检查可用性 -
处理器等级是多少?为什么不使用 CPU ID?无论如何,如果您使用 C++,那么
<random>会更好