2013-10-24 137 views
2

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

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

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

如果您每次使用相同的种子,您设置的不是随机的。如果你想要一个静态伪随机序列,只需生成一次并对其进行硬编码即可。 –

+1

@DStanley例如,考虑在日志环境中记录用于生成随机数的种子。在使用相同的种子来尝试复制问题时,您是否可以确保在开发环境中获得相同的序列? – Servy

回答

8

运行相同的架构不同PC之间听起来不可能的(意思是:你可以合理地预期相同序列) - 但MS做保留更改执行的权利。 MSDN声明:

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

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

+0

+1。如果有一天'Rand'会像每个AppDomain一样随机行为(类似于String.GetHashCode()的新选项) - [UseRandomizedStringHashAlgorithm](http://msdn.microsoft.com/en-us /library/jj152924.aspx)) –

3

根据这个链接,你会得到相同的序列在所有情况下为。净4.5不知道这是否适用于不同版本的.Net框架(同意以前的答案)。

MSDN

“提供了一个相同的种子值不同的随机的对象使每个实例以产生随机数的相同的序列。”