一个很好的C随机数生成器

时间:2013-02-15 08:36:40

标签: c random

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

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

2 个答案:

答案 0 :(得分:12)

这似乎是Mersenne Twister

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

答案 1 :(得分:7)

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

您可以在此处找到他们的代码和比较:http://xorshift.di.unimi.it/