为每个生成的随机数更改种子

时间:2014-04-15 11:42:58

标签: random

假设您使用种子生成随机数,作为自1970年1月以来经过的时间(如微软库中)。但是,在生成每个随机数后,您可以更改种子。这会给出一个真正随机的结果。为什么或为什么不呢?

修改 我刚才还有一个问题。如果我让种子不确定,该怎么办?对于一个小例子,假设种子是由已经存在的TRNG(真随机数生成器)生成的。换句话说,如果我能以某种方式使种子不确定,我将能够生成随机序列,即非确定性序列。为什么或为什么不呢?

2 个答案:

答案 0 :(得分:2)

基本上,你的技术只是将“随机性”转移到调用random()函数时:如果你在确定性时间调用函数(例如每秒一次),结果将是确定性的。如果您随机调用该函数,结果将是随机的。

更准确地说,它取决于你将seed()函数称为什么值。如果使用确定性值调用seed(),则后续调用random()的结果将是确定性的。

更新(按要求):

软件随机生成器完全确定;它产生的值序列完全取决于你传递给seed()的初始调用。因此,如果使用已知值调用seed(),则可以准确预测从后续调用random()中获得的值系列。如果你用一个真正的随机数调用seed(),那么对random()的调用将相应地随机。

(但这引出了一个问题:如果你有随机数传递给种子(),为什么还要打扰调用random()呢?)

答案 1 :(得分:1)

真正的随机性不需要种子。播种仅适用于PRNG,它们是100%确定性的,而不是真正随机的。

所以不,使用任何形式的PRNG都不会产生真正的随机性。