42

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

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

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

4

5 回答 5

31

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

于 2008-08-03T02:18:57.987 回答
8

Gnu 科学库(GSL) 有一套相当广泛的 RN 生成器、测试工具等。如果您使用的是 linux,它可能已经在您的系统上可用。

于 2008-08-03T02:26:33.213 回答
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 库已包含在内

于 2008-08-13T18:08:03.457 回答
5

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

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

#include <random>

于 2012-06-26T16:05:10.290 回答
2

Boost.Random是我RNG的首选

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

于 2012-03-29T10:32:22.057 回答