标题总结了一下。我很想知道是否存在一种算法,该算法能够在给定相同输入的情况下产生可变输出,而无需依赖其他来源(例如DateTime.Now)或从光传感器生成的数字等随机性。此外,该算法无法运行按顺序,只有两个不同的,不相关的运行会产生不同的输出。
2.0 + 2.0
在这样的系统上进行计算不会得出相同的结果。它不需要另一个随机性来源。
标题总结了一下。我很想知道是否存在一种算法,该算法能够在给定相同输入的情况下产生可变输出,而无需依赖其他来源(例如DateTime.Now)或从光传感器生成的数字等随机性。此外,该算法无法运行按顺序,只有两个不同的,不相关的运行会产生不同的输出。
2.0 + 2.0
在这样的系统上进行计算不会得出相同的结果。它不需要另一个随机性来源。
Answers:
不,伪随机数生成算法将始终在给定相同种子的情况下产生相同的输出(因此为伪随机数)。
我发现使用术语“算法”而不是“程序”很有趣。这排除了一类肯定的答案(RAM中的软错误,多线程RNG中的不同线程交织等)。如果您认为算法的每次运行在每次迭代中均接受相同的输入(没有随机性)是经过明确指定的,那么它将在每次运行中生成相同的输出。
话虽如此,即使对CPU温度这样的基本事物进行适当的标准化,也无法预测到足以充当熵的来源。因此,如果您知道运行什么时间,就不要认为这意味着可以预测“加密安全”的随机数生成器;他们中的许多人利用系统生成的熵Feed。
您是否知道人们非常努力地确保给定相同的种子,每次产生相同的随机数序列?对于诸如蒙特卡洛模拟之类的事物而言,这是理想的属性,因为这意味着结果是完全可重现的。如果您不指定种子,则将使用诸如时间之类的方法,但是确实需要精确的可重复性。
唯一真正不希望这样做的RNG是用于加密的RNG,并且通常通过使用操作系统自己的随机数源(在正常情况下不可重绕并且可能使用特殊硬件)来提供它们的种子,以实现此目的。