鲁棒随机数生成

36 c# c++ random

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

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

任何源代码,源代码链接等将不胜感激!如果不这样,我应该寻找什么类型的RNG?

Chris Jester.. 28

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


Mark Harriso.. 8

Gnu科学图书馆(GSL)拥有相当广泛的RN生成器,测试工具等.如果您使用的是Linux,它可能已经在您的系统上可用.


nsanders.. 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库


bames53.. 5

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

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

#include <random>