使用种子生成随机数

本文关键字:随机数 种子 | 更新日期: 2023-09-27 18:36:49

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

int seed = 99;
var random = new Random(seed);
for (int i = 0; i < 1000; i++)
   random.Next();

使用种子生成随机数

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

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

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

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

MSDN

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