首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >跨平台随机数生成器

跨平台随机数生成器
EN

Stack Overflow用户
提问于 2013-06-14 02:15:52
回答 3查看 3.4K关注 0票数 13

当你需要从一个种子生成一个随机数,并保证它在不同版本的.NET框架和Mono框架,以及不同的架构(x86,x64)上都是相同的数字时,你该怎么做?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-14 02:20:13

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

票数 15
EN

Stack Overflow用户

发布于 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包中进行了优化。

票数 3
EN

Stack Overflow用户

发布于 2013-06-14 02:19:48

从维基获取以下代码:http://en.wikipedia.org/wiki/Random_number_generation

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17094189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档