跨平台随机数发生器

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

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

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

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

 m_w = ; /* must not be zero */ m_z = ; /* 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

还有通过NuGet提供的Troschuetz.Random库,它提供了几种“标准”随机化方法,这些方法也可以在其他平台上使用:

完全管理的库提供各种随机数生成器和分发。 更确切地说,该库提供7个发生器(ALF,MT19937,标准,XorShift128,NR3,NR3Q1,NR3Q2) ,6个离散分布(伯努利,二项式,分类,离散统一 ,几何,泊松)和21个连续分布(如正态,指数, ChiSquare,Beta等); 此外,它提供了一个类似于Python提供的随机类(TRandom)。

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