跨平台随机数生成器

本文关键字:随机数生成器 跨平台 | 更新日期: 2023-09-27 18:18:30

当您需要能够从种子生成随机数,并保证它在不同版本的。net框架和Mono框架以及不同的体系结构(x86, x64)中是相同的数字时,您该怎么办?

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

跨平台随机数生成器

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

通过NuGet也可以使用Troschuetz.Random库,它提供了几个"标准"随机化方法,这些方法可能也可以在其他平台上使用:

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

这个库背后的所有辛勤工作都是由Stefan trosch tz完成的,并在这个。net包中由Alessio Parma优化。

从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