我正在阅读此页:http://freespace.virgin.net/hugo.elias/models/m_perlin.htm 其中以下函数用于创建没有解释的随机数:
function IntNoise(32-bit integer: x)
x = (x<<13) ^ x;
return ( 1.0 - ( (x * (x * x * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);
end IntNoise function
有没有任何方法可以解释为什么会产生“随机”数字,或者为什么生成的数字是真正随机的(即具有足够高的熵)的任何证明?
感谢
答案 0 :(得分:3)
与所有PRNG一样,熵输出受熵输入的限制。所以它至少与rand()
一样是非随机的(根本不是随机的)。
George Marsaglia开发了一套称为“Diehard tests”(website,Wikipedia article)的测试,测试PRNG的某些有用属性,希望任何具有这些属性的PRNG都是直观的可能对您需要PRNG的任何问题都有用。如果您愿意,可以在IntNoise
上运行这些测试。
您提供的IntNoise
函数可能不如通用伪随机数生成器。通用伪随机数生成器很难得到,大多数人一遍又一遍地重复使用相同的几个。但是,IntNoise
是无状态的,这是一个不错的属性并且不常见。