鲁棒随机数生成

时间:2008-08-03 02:06:00

标签: c# c++ random

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

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

任何源代码,源代码链接等都将受到赞赏!如果不这样,我应该寻找什么类型的RNG?

5 个答案:

答案 0 :(得分:28)

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

答案 1 :(得分:8)

The Gnu Scientific Library(GSL)有一套非常广泛的RN生成器,测试工具等。如果您使用的是Linux,它可能已经在您的系统上可用。

答案 2 :(得分:7)

留意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库

答案 3 :(得分:5)

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

此外,还有许多适配器可以生成特定的分布,无需手动进行此类操作(通常不正确的操作)。

#include <random>

答案 4 :(得分:2)

Boost.Random是我对RNG的首选

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