当你需要从一个种子生成一个随机数,并保证它在不同版本的.NET框架和Mono框架,以及不同的架构(x86,x64)上都是相同的数字时,你该怎么做?
我目前正在考虑在一个文件中存储数百万个随机字节,作为这个问题的临时解决方案,但我认为可能有更好的方法(希望不要太复杂)。
发布于 2013-06-14 02:20:13
如果您需要一个真正可移植的实现,最好的选择可能就是使用一个自定义的随机数生成器,比如这个Mersenne Twister implementation或Colin Green's Fast Random Number Generator。通过控制实现,您可以保证在任何平台上给定相同的种子时都会得到相同的结果。
发布于 2018-09-15 06:19:33
还有通过NuGet提供的Troschuetz.Random库,它提供了几种“标准”随机化方法,想必也可以在其他平台上使用:
完全托管库,提供各种随机数生成器和发行版。更准确地说,这个库提供了7个生成器(ALF,MT19937,标准,XorShift128,NR3,NR3Q1,NR3Q2),6个离散分布(伯努利分布,二项分布,分类分布,DiscreteUniform分布,几何分布,泊松分布)和21个连续分布(如正态分布,指数分布,ChiSquare分布,Beta分布等等);此外,它还提供了一个类似于Python提供的随机类(TRandom)。
这个库背后的所有艰苦工作都是由Stefan Troschütz完成的,并由Alessio Parma在这个.NET包中进行了优化。
发布于 2013-06-14 02:19:48
从维基获取以下代码: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
https://stackoverflow.com/questions/17094189
复制相似问题