是否每个机器使用相同的种子产生随机数的相同的结果呢?(Does every machine gene

2019-06-27 15:42发布

我目前停留在随机生成。 要求规格显示这样一个示例:

Random rand = new Random(3412);

兰特结果不是直接给出了,但用于其他性能。

我写与上述相同的代码由种子3412然而,生成一个随机数,其余性能的结果与样品完全不同。

生成的结果是518435373,我曾经试过在网上C#编译器相同的代码,但让一代是11688046的不同的结果,其余的性能结果也与样本不同。

所以,我只是想知道的是,应该在不同的机器上有什么不同?

顺便说一句,任何人都可以提供从您的计算机的结果只是看它是否与我相同。

Answer 1:

我希望任何一个实现 ,给出相同的种子相同的序列,但有可能是涉及到不同的实现。 例如,“在线C#编译器”很可能最终会使用单声道,这我期望有不同的实现的一个在.NET。

我不知道实现.NET 版本之间是否发生了变化,但同样,这似乎完全可能的。

对于文档Random(int)构造状态:

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

...但它没有指定不同的版本等赫克的影响,它甚至不注明x86和x64版本是否可以得到同样的结果。 我期望的任何一个特定的CLR实例 (即一个进程相同的结果,而不是两个的CLR运行并排侧,无论是*。

如果您有什么需要更稳定,我会用指定的算法开始-我打赌有梅森倍捻机等可用的实现。



Answer 2:

它没有被指定为做出这样的承诺,所以你应该认为它没有。

与任何规范一个很好的规则,是不是让那些不要求合理利用的承诺,让你可以更自由地以后改善的事情。

事实上, Random的文件说:

当前实现Random类是基于唐纳德·E·Knuth的消减随机数生成算法。

注意短语“当前的实现”,这意味着它可能在未来改变。 这非常有力地表明,不仅是有没有承诺要版本之间是一致的,但目前还没有打算要么。

如果规范要求一致的伪随机数,那么它必须指定算法以及种子值。 事实上,即使Random指定为做出这样的承诺,如果你需要的所有或你的规范的一部分的non-.NET实现什么-什么与它进行互操作-在未来?



Answer 3:

这可能是由于不同的framework版本。 看看这个



Answer 4:

在线提供商您尝试可能会使用单执行CLR,这是一个微软提供的不同的。 所以,可能是他们的Random类的实现是一个有点不同。



文章来源: Does every machine generate same result of random number by using the same seed?