我想知道PHP ()函数是如何工作的?我的意思是,如果没有任何规则或任何其他随机化函数,这个函数是如何随机化数字的?
例如,我有这样一个数组:
$numbers = array(0,1,2,3,4,5,6,7,8,9);那么,如果没有rand()、array_rand()等,我如何将这些数字随机化。
基本问题是:
随机化函数是如何工作的?
发布于 2018-05-10 16:04:02
PHP和所有的rand()一样,并不生成真正的随机数据,而是使用一些数学函数来创建看似随机的数据。
方法可能各不相同,但基本原则是:
我们取一个初始值作为“种子”,s。(这可能是当前时间,用户输入“随机”值,甚至从某些熵源中获取真正的随机熵)
然后,我们使用s并将一个函数f应用于它,生成一个新的值s' (s-素数)(这个函数通常是一个模函数或散列函数)。
然后,我们可以无限地重复这个过程,将s'放入f生产s'',等等。
f的这个结果序列是我们的“随机”数字。
但是,希望您认识到,f仍然是一样的,并且在相同的输入下总是会产生相同的输出。
因此,如果我们给它相同的起始种子s,我们将得到相同的s',s'',s'''的序列。
这就是为什么我们叫他们"Psuedo“随机的原因。如果你不知道开始的种子,也不观察太长时间的序列,它似乎是随机的。但是,如果我们知道f使用的函数和启动种子s,我们就可以预测rand()会产生的每个值。
发布于 2018-05-10 15:56:11
通常,它取决于基于毫秒甚至纳秒的时间。我们可以用一些固定的值多播放种子数,得到一个特定的返回,在大多数情况下是0到1之间,例如:考虑到数字是秒的种子。
numberi+1 = (a * numberi + c) mod mhttps://stackoverflow.com/questions/50276784
复制相似问题