用种子生成随机数

时间:2013-10-24 16:28:51

标签: c# random .net-4.5

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

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

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

2 个答案:

答案 0 :(得分:8)

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

  

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

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

答案 1 :(得分:3)

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

MSDN

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