当您需要从种子生成随机数,并保证它在不同版本的.NET Framework和Mono Framework以及不同架构(x86、x64)之间是相同的,该怎么办?
我目前正在考虑将数百万个随机字节存储在文件中,以解决这个问题,但我认为可能有更好的方法(希望不会太复杂)。
当您需要从种子生成随机数,并保证它在不同版本的.NET Framework和Mono Framework以及不同架构(x86、x64)之间是相同的,该怎么办?
我目前正在考虑将数百万个随机字节存储在文件中,以解决这个问题,但我认为可能有更好的方法(希望不会太复杂)。
Xorshift RNGs
实现似乎正是我所需要的,但我不确定其许可协议是什么。GPL
甚至LGPL
与该项目不兼容。 - Mr. Smith此外,通过NuGet还可使用Troschuetz.Random
库,提供了几种“标准”随机化方法,这些方法在其他平台上也可以使用:
完全托管的库,提供各种随机数生成器和分布。更准确地说,此库提供了7个生成器(ALF、MT19937、Standard、XorShift128、NR3、NR3Q1、NR3Q2),6个离散分布(伯努利、二项式、分类、离散均匀、几何、泊松)和21个连续分布(如正态、指数、卡方、贝塔等),此外,它还提供了一个类似于Python提供的随机类(TRandom)。
此库背后的所有辛勤工作都是由Stefan Troschütz完成的,并在.NET包中由Alessio Parma进行了优化。
我从维基百科得到了以下代码: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 */
}