网上常能见到的一段 JS 随机数生成算法如下,为什么用 9301, 49297, 233280 这三个数字做基数?
很多人认为这是简单的Magic Number,其实这背后有内在的原因,这三个数字并不是随便乱选出来的. 入门级的选择标准 这种伪随机数生成器叫做线性同余生成器(LCG, Linear Congruential Generator),几乎所有的运行库提供的rand都是采用的LCG,形如: I_{n+1}=aI_n+c\ (mod\ m) 生成的伪随机数序列最大周期m,范围在0到m-1之间.要达到这个最大周期,必须满足 以上三条被称为Hull-Dobell定理. 作为一个伪随机数生成器,周期不够大是不好意思