c# -稳健随机数生成

Translate

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

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

任何源代码,链接到源,等等,将不胜感激!如果失败,我应该寻找哪种类型的RNG?

This question and all comments follow the "Attribution Required."

所有的回答

Translate

对于C ++,助推随机可能正是您想要的。它支持MT(在许多其他算法中),并且可以通过nondet_random类。看看这个! :-)

来源
Translate

格努科学图书馆(GSL)拥有大量的RN生成器,测试工具等。如果您使用的是Linux,则它可能已在您的系统上可用。

来源
Translate

注意格努科学图书馆。它是根据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库

来源
Translate

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

另外,有许多适配器可产生特定的分布,从而无需手动进行这种操作(通常做错了一些事情)。

#include <random>

来源
Translate

Boost.Random是我选择RNG的首选

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

来源