【问题标题】:Robust Random Number Generation [closed]强大的随机数生成
【发布时间】:2010-09-05 06:17:53
【问题描述】:

我正在寻找不使用特殊硬件的高性能、相当稳健的 RNG。它可以使用数学方法(Mersenne Twister 等),它可以从机器“收集熵”,无论如何。在 Linux/etc 上,我们有一个 drand48(),它生成 48 个随机位。我想要一个用于 C++ 或 C# 的类似函数/类,它可以生成超过 32 位的随机性,并且低位与高位一样随机。

它不必是加密安全的,但它不得使用或基于 C 语言 rand() 或 .NET System.Random

任何源代码、源链接等都将不胜感激!如果做不到这一点,我应该寻找哪种类型的 RNG?

【问题讨论】:

  • 为什么不System.Random?我知道rand 很差,System.Random 也很差吗?如果是这样,那很可悲:(
  • 结束这个问题的理由似乎完全不正确。
  • @bames53 我现在发布了重新投票。你似乎也有足够的代表,所以去做吧。 :-D
  • 我想现在你可以
    简单地谷歌

标签: c# c++ random


【解决方案1】:

对于 C++,Boost.Random 可能是您正在寻找的。它支持 MT(在许多其他算法中),并且可以通过 nondet_random 类收集熵。看看这个! :-)

【讨论】:

    【解决方案2】:

    The Gnu Scientific Library (GSL) 拥有大量的 RN 生成器、测试工具等。如果您使用的是 linux,那么它可能已经在您的系统上可用。

    【讨论】:

      【解决方案3】:

      注意 Gnu 科学图书馆。它是根据 GPL 而不是 LGPL 获得许可的。

      正如其他人所提到的,Boost 随机类是一个好的开始。它们的实现符合 TR1 的 PRNG 代码:

      http://www.boost.org/doc/libs/1_35_0/libs/random/index.html http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1452.html

      如果您有最新版本的 G++ 编译器,您可能会发现已经包含 TR1 库

      【讨论】:

        【解决方案4】:

        C++11 采用了基于 boost.random 的健壮随机数库。您可以使用不同的算法访问多个随机数引擎,以满足您的质量、速度或大小要求。质量实现甚至可以通过std::random_device 提供对您平台提供的任何非确定性 RNG 的访问。

        此外,还有许多适配器可以生成特定的发行版,从而消除了手动进行此类操作的需要(经常做错的事情)。

        #include <random>

        【讨论】:

          【解决方案5】:

          Boost.Random是我的RNG首选

          http://www.boost.org/doc/libs/random

          【讨论】:

          • 你可以通过谷歌搜索随机找到 Boost,这就是我力求提供任何链接的原因。现在我用 lib 的链接更新了它。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-04-13
          • 1970-01-01
          • 2011-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-27
          相关资源
          最近更新 更多