10

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

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

2 回答 2

13

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

  • 它比 rand() 的大多数标准实现更快
  • 它的周期很长 (2^19937 − 1)
  • 它具有相当高的质量——它通过了大多数标准化的随机性测试
  • 这是公共领域
于 2013-02-15T08:38:49.843 回答
8

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

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

于 2014-09-13T03:10:20.700 回答