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

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

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

有帮助吗?

解决方案

对于 C++ 来说, 增强随机 可能就是您正在寻找的。它支持 MT(以及许多其他算法),并且可以通过 nondet_random 班级。一探究竟!:-)

其他提示

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

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

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

此外,还有许多适配器可以生成特定的发行版,从而无需手动进行此类操作(这通常是错误的)。

#include <random>

Boost.Random 是我RNG的第一选择

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top