强大的随机数生成

funde 发布于 2018-02-04 c# 最后更新 2018-02-04 01:05 711 浏览

我正在寻找一个高性能,相当强大的RNG,不需要特殊的硬件。它可以使用数学方法(Mersenne Twister等),它可以从机器“收集熵”。在Linux/etc上,我们有一个drand48(),它产生48个随机位。我想为C++或C#提供一个类似的函数/类,它可以产生32位以上的随机性,而低阶位与高阶位一样随机。 它不必是加密安全的,但不得使用或基于C语言rand()或.NET System.Random。 任何源代码,链接到源,等将不胜感激!否则,我应该寻找什么类型的RNG?

已邀请:

eomnis

赞同来自:

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

nodio

赞同来自:

The Gnu Scientific Library(GSL)有一套相当广泛的RN生成器,测试设备等。如果你在linux上,它可能已经在你的系统上可用。

fillum

赞同来自:

小心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库

west

赞同来自:

Boost.Random是我的首选RNG http://www.boost.org/doc/libs/random

znon

赞同来自:

C++ 11采用了基于boost.random的强大的随机数字库。您可以使用不同的算法访问多个随机数引擎,以满足您的质量,速度或尺寸要求。质量实现甚至可以通过std::random_device访问您的平台提供的任何非确定性RNG。 另外还有许多适配器可以产生特定的分布,而不需要手动进行这种操作(通常不正确的操作)。 #include <random>