跨平台随机数发生器

问题描述 投票:13回答:3

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

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

c# random
3个回答
12
投票

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


2
投票

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

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

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


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

© www.soinside.com 2019 - 2024. All rights reserved.