鲁棒的随机数生成

发布于 2024-07-03 23:52:15 字数 343 浏览 9 评论 0原文

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

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

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

I'm looking for a performant, reasonably robust RNG using no special hardware. It can use mathematical methods (Mersenne Twister, etc), it can "collect entropy" from the machine, whatever. On Linux/etc we have a drand48() which generates 48 random bits. I'd like a similar function/class for C++ or C# which can generate more than 32 bits of randomness and which low-order bits are equally as random as high-order bits.

It doesn't have to be cryptographically secure but it must not use or be based on the C-language rand() or .NET System.Random.

Any source code, links to sources, etc. would be appreciated! Failing that, what TYPE of RNG should I be looking for?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

染火枫林 2024-07-10 23:52:19

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

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

#include

C++11 has adopted a robust random number library based on boost.random. You can access a number of random number engines using different algorithms to meet your quality, speed, or size requirements. Quality implementations will even provide access to whatever non-deterministic RNG your platform offers via std::random_device.

In addition there are many adaptors to produce specific distributions, eliminating the need to do such manipulation by hand (something often done incorrectly).

#include <random>

π浅易 2024-07-10 23:52:19

Boost.Random 是我对 RNG 的首选

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

Boost.Random is my first choice for RNG

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

蓝天白云 2024-07-10 23:52:18

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

The Gnu Scientific Library (GSL) has a pretty extensive set of RN generators, test harness, etc. If you're on linux, it's probably already available on your system.

追我者格杀勿论 2024-07-10 23:52:18

留意 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 库已包含在内

Watch out for the Gnu Scientific Library. It's licensed under the GPL rather than LGPL.

As other folks mentioned, the Boost random classes are a good start. Their implementation conforms to the PRNG code slated for TR1:

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

If you have a recent version of the G++ compiler, you may find the TR1 libraries already included

溺孤伤于心 2024-07-10 23:52:17

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

For C++, Boost.Random is probably what you're looking for. It has support for MT (among many other algorithms), and can collect entropy via the nondet_random class. Check it out! :-)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文