42

特別なハードウェアを使用せずに、パフォーマンスが高く、適度に堅牢な RNG を探しています。数学的手法 (Mersenne Twister など) を使用したり、マシンから「エントロピーを収集」したりできます。Linux/etc では、drand48()48 のランダム ビットを生成する があります。32 ビットを超えるランダム性を生成でき、下位ビットが上位ビットと同じくらいランダムである、C++ または C# 用の同様の関数/クラスが必要です。

暗号的に安全である必要はありませんが、C 言語rand()または .NETを使用したり、それらに基づいたりしてはなりませんSystem.Random

ソースコード、ソースへのリンクなどをいただければ幸いです。それができない場合、どのタイプの RNG を探す必要がありますか?

4

5 に答える 5

31

C++ の場合、おそらくBoost.Randomが探しているものです。nondet_random(他の多くのアルゴリズムの中でも) MT をサポートしており、クラスを介してエントロピーを収集できます。見てみな!:-)

于 2008-08-03T02:18:57.987 に答える
8

Gnu Scientific Library (GSL) には、かなり広範な RN ジェネレーター、テスト ハーネスなどのセットがあります。Linux を使用している場合は、おそらくシステムで既に利用可能です。

于 2008-08-03T02:26:33.213 に答える
7

GnuScientificLibraryに注意してください。LGPLではなくGPLの下でライセンスされています。

他の人々が述べたように、ブーストランダムクラスは良いスタートです。それらの実装は、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 に基づく堅牢な乱数ライブラリが採用されています。さまざまなアルゴリズムを使用して多数の乱数エンジンにアクセスし、品質、速度、またはサイズの要件を満たすことができます。高品質の実装は、プラットフォームが提供する非決定論的 RNG へのアクセスも提供しますstd::random_device

さらに、特定のディストリビューションを生成するためのアダプターが多数あり、そのような操作を手動で行う必要がなくなります (よく誤って行われることがあります)。

#include <random>

于 2012-06-26T16:05:10.290 に答える
2

Boost.RandomRNGの私の最初の選択です

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

于 2012-03-29T10:32:22.057 に答える