我正在寻找一种高性能,相当强大的RNG,不使用特殊硬件。它可以使用数学方法(Mersenne Twister等),它可以从机器“收集熵”,无论如何。在Linux / etc上,我们有drand48()
,它产生48个随机位。我想要一个类似的C ++或C#函数/类,可以产生超过32位的随机性,哪些低阶位与高阶位一样随机。
它不一定是加密安全的,但不得使用或基于C语言rand()
或.NET System.Random
。
任何源代码,源代码链接等都将受到赞赏!如果不这样,我应该寻找什么类型的RNG?
答案 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。
此外,还有许多适配器可以生成特定的分布,无需手动进行此类操作(通常不正确的操作)。
答案 4 :(得分:2)
Boost.Random
是我对RNG的首选