2008-08-03 34 views
34

私は、特別なハードウェアを使用しない、パフォーマンスの良い、堅牢なRNGを探しています。それは数学的な方法(メルセンヌツイスターなど)を使用することができます、それは何でも、マシンから "エントロピーを収集する"ことができます。 Linux /などでは、ランダムビット数48ビットを生成するdrand48()があります。私は32ビット以上の乱数を生成することができるC++またはC#のための同様の関数/クラスを希望します。また、下位ビットは上位ビットと同じようにランダムです。堅牢な乱数生成

暗号で保護する必要はありませんが、C言語のrand()または.NET System.Randomを使用しないでください。

ソースコード、ソースへのリンクなどがあれば幸いです!それに失敗したら、私はどんなタイプのRNGを探していますか?

+0

なぜ「System.Random」ではないのですか?私は 'rand'が貧しいことを知っています、' System.Random'も悪いですか?もしそうなら、それは悲しいです:( –

+3

この質問を閉じるための正当性はまったく正しいとは思われません。 – bames53

+0

@ bames53私は今すぐ再投票を投稿しました。あなたも十分な担当者がいるようですので、それをしてください:-D –

答えて

27

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

8

The Gnu Scientific Library(GSL)にはかなり広範囲のRNジェネレータ、テストハーネスなどがあります。もしあなたがLinuxを使用しているのであれば、すでにシステム上で利用可能でしょう。

7

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

他の人たちと同じように、Boostランダムクラスは良いスタートです。あなたはG ++コンパイラの最新バージョンを持っている場合は、私の最初の選択肢です

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

、あなたはTR1ライブラリがすでに

2

Boost.Randomを含ん見つけることがあります。彼らの実装では、TR1に予定PRNGコードに準拠します

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

+0

ブーストは、私がリンクを提供する理由をグーグルで調べるだけで、ランダムに見つけることができます。 –

5

をRNGのためにC++ 11は、ブーストをもとに強固な乱数ライブラリーを採用しています。ランダム。さまざまなアルゴリズムを使用して、品質、スピード、またはサイズの要件を満たす多数の乱数エンジンにアクセスできます。品質実装では、std::random_device経由でプラットフォームが提供するすべての非確定的なRNGにアクセスすることさえできます。

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

#include <random>

関連する問題