首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速随机生成器

快速随机生成器
EN

Stack Overflow用户
提问于 2009-11-24 23:24:32
回答 5查看 14.4K关注 0票数 11

如何在C#中创建一个支持用maxValue (和/或minValue)填充字节数组的快速随机数生成器?我已经找到了这个http://www.codeproject.com/KB/cs/fastrandom.aspx,但没有这些功能。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-24 23:41:36

用整数填充字节的事实与System.Random的典型用例有很大的不同,如果真的需要的话,你可能会把它搞得一团糟。

System.Random是为一般用途而设计的。(事实上,当我对系统随机例程进行速度和分布测试时,我通常会发现它们毫无启发性。)有些情况下,你会想要其他的东西。但你必须非常明确地说明你的需求。多快?你愿意放弃什么?

如果您真的需要“快速”,Marsaglia提供了许多非常快速的随机数生成器,可以根据您的需要进行调整。以下是其中之一Xorshift的几个链接:

对于许多使用

  • Xorshift (Wikipedia)
  • Fastest implementation of Xorshift in C#, and measurements comparing it to System.Random
  • The Diehard tests的fast randoms.
  • Here's a fast twister来说,
    • Xorshift (Wikipedia)
    • Fastest implementation of Xorshift in C#, and measurements comparing it to System.Random
    • TheDiehard tests都是可用的

最后一个解决了您以字节为目标的事实。

我只需要几次超快的随机数。在处理器缓慢的游戏机游戏中,随机可能会造成达到帧率目标和不达到目标的差异。你的用例是什么?如果可以的话,一定要使用System.Random。

或者,调整您在问题中链接的例程(作者声称其速度是System.Random的8倍)。

票数 27
EN

Stack Overflow用户

发布于 2009-11-24 23:34:24

对于任何典型的用法,System.Random都足够快。如果您对包含System.Random调用的代码有性能问题,请确保在尝试构建新的随机数之前对代码进行性能分析。您的性能问题很可能不在框架中,而是在您自己的代码中。

如果您在循环中调用Random,请确保您不是在每次迭代中创建新的Random实例,而是重用一个通用的Random实例。这样做将提高性能,因为您不需要为GC创建新的对象以进行清理,并且还将提高生成的随机数的质量。

票数 13
EN

Stack Overflow用户

发布于 2009-11-25 01:47:14

如果您有一个从单位间隔返回数字的随机数生成器,就像您在代码项目文章中提到的那样,那么您可以首先使用该生成器生成值u,然后返回a + (b-a)*u以获取a和b之间的值。

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

https://stackoverflow.com/questions/1790776

复制
相关文章

相似问题

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