为什么这段代码会生成伪随机数?

时间:2012-02-26 23:50:51

标签: random

我正在阅读此页: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

有没有任何方法可以解释为什么会产生“随机”数字,或者为什么生成的数字是真正随机的(即具有足够高的熵)的任何证明?

感谢

1 个答案:

答案 0 :(得分:3)

与所有PRNG一样,熵输出受熵输入的限制。所以它至少与rand()一样是非随机的(根本不是随机的)。

George Marsaglia开发了一套称为“Diehard tests”(websiteWikipedia article)的测试,测试PRNG的某些有用属性,希望任何具有这些属性的PRNG都是直观的可能对您需要PRNG的任何问题都有用。如果您愿意,可以在IntNoise上运行这些测试。

您提供的IntNoise函数可能不如通用伪随机数生成器。通用伪随机数生成器很难得到,大多数人一遍又一遍地重复使用相同的几个。但是,IntNoise是无状态的,这是一个不错的属性并且不常见。