【问题标题】:A good random number generator for C一个很好的 C 随机数生成器
【发布时间】:2013-01-31 04:45:54
【问题描述】:

我需要一个好的随机数生成器用于我用 C 编写的程序。它是一个分形火焰生成器,如果你有兴趣的话。尽管我过去使用相同的算法取得了成功,但我的图像非常粗糙。我终于意识到,不同之处在于我使用的随机数生成器。令人难以置信的是,它产生了巨大的差异。我希望更好的随机数生成器可能会产生更好的结果。答案可能以代码示例或指向预先存在的随机数库的链接的形式出现。最重要的要求:

  • 它应该产生相对高质量的随机数流
  • 它的周期必须超过百亿
  • 它应该足够快并提供良好的性能权衡。

【问题讨论】:

  • 这个问题是有效的恕我直言。有点过于自我中心,但在要求中仍然有效。
  • @UmNyobe 我提名这个问题重新开放。我不明白为什么这“不是一个真正的问题”。不是一个好问题?也许吧,但它仍然是有效的。
  • rand() 是一个很好的 C 随机数生成器。
  • 哇...我没想到会有这样的负面反应。我不了解这个社区,有时它有些严格的规则。在我看来,这是一个完全有效的问题。它具有答案必须满足的特定点,因此它不会太笼统,它提供了一些上下文,因此可以针对情况做出特定的答案,它不会太具体以至于它不会再对任何人有用。我知道我不应该这样做,但我开始有点个人化了。看来我在这个网站上受到了很多攻击。

标签: c random


【解决方案1】:

如果您正在寻找一种非常快速、质量不错的算法,您应该考虑xorshift128+xorshift1024*。它们几乎和 LCG 一样快(根据我的比较,它们只比简单的内联 LCG 慢 30%),同时质量也比 LCG 好得多。

你可以在这里找到他们的代码和比较:http://xorshift.di.unimi.it/

【讨论】:

  • 这里的答案被低估了 - 到目前为止,我已经在几个项目中使用了这些,并且它们工作得很好,实现如此简单!
【解决方案2】:

这似乎是Mersenne Twister 的一个很好的用例

  • 它比 rand() 的大多数标准实现更快
  • 它的周期很长 (2^19937 − 1)
  • 它具有相当高的质量 - 它通过了大多数标准化随机测试
  • 这是公共领域

【讨论】:

  • 不,他正在给候选人。 +1 顺便说一句,以前从未听说过梅森
  • 哇,这看起来像一个非常好的随机数生成器。非常感谢菲利普,我永远不会自己找到这个。
  • 我很惊讶 MT 比rand() 的大多数实现都快。 rand() 通常不是 LCG,因此速度很快但质量很差?
  • 考虑到这实际上将我不工作的基于rand() 的算法变成了我可以实际使用的东西,+1!
猜你喜欢
  • 2011-02-08
  • 2012-01-25
  • 2023-01-03
  • 2011-09-18
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多