質問

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

暗号的に安全である必要はありませんが、C 言語を使用したり、C 言語に基づいたりすることはできません。 rand() または.NET System.Random.

ソースコード、ソースへのリンクなど。よろしくお願いします!それができない場合、どのタイプの RNG を探す必要がありますか?

役に立ちましたか?

解決

C++ の場合、 ブーストランダム おそらくあなたが探しているものです。(他の多くのアルゴリズムの中でも特に) MT をサポートしており、 nondet_random クラス。それをチェックしてください!:-)

他のヒント

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

Gnu Scientific Library に注目してください。LGPL ではなく GPL に基づいてライセンスされています。

他の人が述べたように、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