一致的跨平台(java .Net)PseudoRandom生成器如果播种相同

时间:2012-09-25 17:35:39

标签: java .net random cross-platform seed

是否存在标准的跨平台号码生成器/算法/库,如果使用相同的输入(在我的情况下是某种类型的散列)播种,则始终生成相同的伪随机数集?

理想情况下,我希望能够在任何目标计算机上以Java和.Net的形式执行此跨平台,并获得相同的一致输出(模糊随机整数)。

如果不可能,我会自己滚动(我的随机性要求非常低,基本上用于根据它的ID为某些东西分配不同的颜色 - 我只想总是为同一个项目分配相同的颜色,无论我在运行什么系统。)

1 个答案:

答案 0 :(得分:4)

有一种非常简单且众所周知的RNG算法“Multiply-with-Carry”,可以在我所知道的所有平台上轻松实现。它具有您要求的属性;由你来决定它的随机性是否足够。

来自Wikipedia

  

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

这是C#中简单易懂的实现,您可以轻松适应其他语言:

static int m_w = 1337;      // Choose initialization value, must not be zero
static int m_z = 123123;    // Choose initialization value, must not be zero

int GetRandom() 
{
    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 */
}

m_w和m_z的初始值是种子。

相关问题