是否可以在不使用语言标准库或外部OS辅助的情况下生成伪随机数?

时间:2014-02-26 02:16:14

标签: random

这是一个与语言无关的问题。我很好奇是否可以生成伪随机数而不: 1.使用语言的builtin / stdlib随机函数 2.使用当前时间。 3.从操作系统获得帮助,即从* nix平台上的/ dev / random读取。

我意识到这些是一些遥远的人为约束。另外,我想指出,我并不关心结果的随机性如何。对于这个问题来说,看似随意的就足够了。它不适用于加密应用程序。

1 个答案:

答案 0 :(得分:1)

有很多算法用于生成可以在不使用内置随机函数等的情况下实现的伪随机数。

E.g。 (from Wikipedia):

  

简单的伪随机数发生器的一个例子是   George Marsaglia发明的乘法携带方法。它是   计算速度快且具有良好的(尽管不是加密的   强)随机性:

m_w = <choose-initializer>;    /* must not be zero, nor 0x464fffff */
m_z = <choose-initializer>;    /* must not be zero, nor 0x9068ffff */

uint get_random()
{
    m_z = 36969 * (m_z & 65535) + (m_z >> 16);
    m_w = 18000 * (m_w & 65535) + (m_w >> 16);
    return (m_z << 16) + m_w;  /* 32-bit result */
}

如果您不想将时钟用作随机种子的来源,则可以将其作为计算机状态的函数(例如,某些内存状态的哈希值)。 / p>