2

如果我在 .Net(4.5) 中使用 Random 类并且我总是使用相同的种子来生成 1000 个数字,那么我的 1000 个数字可能在不同的机器上(具有不同的芯片组/内核数等)不一样?我不明白这是怎么回事,但我的一位同事告诉我们,我们需要意识到他们可能会这样。我所做的测试似乎总是一致的。只是担心我可能会遇到不同数字的情况。如果我试图使一代或其他东西并行化,我可以理解它是不同的。

int seed = 99;
var random = new Random(seed);

for (int i = 0; i < 1000; i++)
   random.Next();
4

2 回答 2

8

在运行相同框架的不同 PC 之间听起来不太可能(意思是:您可以合理地期望相同的序列) - 但 MS 确实保留更改实现的权利。MSDN 状态:

不保证 Random 类中的随机数生成器的实现在 .NET Framework 的主要版本中保持不变。因此,您的应用程序代码不应假定相同的种子会在不同版本的 .NET Framework 中产生相同的伪随机序列。

所以:如果你需要更强的保证:使用你自己的 PRNG 实现。有很多这样的选择。

于 2013-10-24T16:32:00.577 回答
3

根据此链接,对于.Net 4.5 ,您将在所有情况下获得相同的序列 不确定这是否适用于不同版本的 .Net 框架(同意先前的答案)。

MSDN

“为不同的 Random 对象提供相同的种子值会导致每个实例产生相同的随机数序列。”

于 2013-10-24T16:32:49.370 回答