跨平台随机数发生器

时间:2013-06-13 18:15:52

标签: c# random

当您需要能够从种子生成随机数时,并保证它在不同版本的.NET Framework和Mono Framework中的编号相同,以及跨不同的体系结构(x86,x64),你做什么的?

我目前正在考虑在文件中存储数百万个随机字节,以用作此问题的临时解决方案,但我认为可能有更好的方法(希望不会太复杂)。

3 个答案:

答案 0 :(得分:12)

如果您需要真正的便携式实施,最好的选择可能就是使用自定义随机数生成器,例如Mersenne Twister implementationColin Green's Fast Random Number Generator。通过控制实现,您可以保证在任何平台上使用相同的种子获得相同的结果。

答案 1 :(得分:2)

NuGet还提供了Troschuetz.Random库,该库提供了几种“标准”随机方法,这些方法也可能在其他平台上可用:

  

完全托管的库,提供各种随机数生成器和分布。更准确地说,该库提供7个生成器(ALF,MT19937,Standard,XorShift128,NR3,NR3Q1,NR3Q2),6个离散分布(Bernoulli,Binomial,Categorical,DiscreteUniform,Geometric,Poisson)和21个连续分布分布(如正态,指数,ChiSquare,Beta等);此外,它提供了与Python提供的(TRandom)类似的随机类。

该库背后的所有艰苦工作均由StefanTroschütz完成,并由Alessio Parma在此.NET软件包中进行了优化。

答案 2 :(得分:1)

从Wiki获得以下代码:http://en.wikipedia.org/wiki/Random_number_generation

m_w = <choose-initializer>;    /* must not be zero */
m_z = <choose-initializer>;    /* must not be zero */

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 */
}

这应该是您所需要的:http://en.wikipedia.org/wiki/Linear_congruential_generator

相关问题