快速随机发生器

taz*_*zzo 10 c# random

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

Nos*_*dna 26

您使用整数填充字节的事实与System.Random的典型使用情况不同,如果您确实需要,可能会严重打败它.

System.Random是为一般用途而制作的.(事实上​​,当我对它们进行速度和分布测试时,我通常会发现系统随机例程没有用.)有些情况下你需要别的东西.但你必须非常明确地表达自己的需求.多快?你愿意放弃什么?

如果你真的需要"快速",Marsaglia已经生产了许多非常快速的随机数发生器,可以根据你的需要进行调整.以下是关于其中一个的一些链接,Xorshift:

最后一个解决了您定位字节的事实.

我只需要几次超快速的randoms.在具有慢速处理器的控制台游戏中,随机可以在达到帧速率目标和不击中它之间产生差异.你的用例是什么?无论如何,如果可以,请使用System.Random.

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


Eri*_*bes 13

System.Random足以满足任何典型用途.如果您在使用包含System.Random调用的代码时遇到性能问题,请确保尝试构建新的Random 之前对代码进行概要分析.机会是您的性能问题不在框架中,而是在您自己的代码中.

如果您在循环中调用Random,请确保每次迭代都不创建新的Random实例,而是重新使用常见的Random实例.这样做可以提高性能,因为您不是要为GC清理创建新对象,还会提高生成的随机数的质量.

  • 令人惊讶的是,有多少SO答案决定争论提问者的需求而不是回答问题. (23认同)
  • 回答这个问题也可以为将来真正需要_faster_的人们解答. (3认同)