Frage

Ich suche ein leistungsstarkes, einigermaßen robustes RNG, das keine spezielle Hardware benötigt.Es kann mathematische Methoden verwenden (Mersenne Twister usw.), es kann „Entropie“ von der Maschine sammeln, was auch immer.Unter Linux/usw. haben wir eine drand48() was 48 Zufallsbits erzeugt.Ich hätte gerne eine ähnliche Funktion/Klasse für C++ oder C#, die mehr als 32 Zufälligkeitsbits erzeugen kann und deren niederwertige Bits genauso zufällig sind wie höherwertige Bits.

Es muss nicht kryptografisch sicher sein, darf jedoch nicht die C-Sprache verwenden oder darauf basieren rand() oder .NET System.Random.

Jeglicher Quellcode, Links zur Quelle usw.wäre dankbar!Wenn das nicht gelingt, nach welcher Art von RNG sollte ich suchen?

War es hilfreich?

Lösung

Für C++, Boost.Zufällig ist wahrscheinlich das, wonach Sie suchen.Es unterstützt MT (neben vielen anderen Algorithmen) und kann über das Entropie sammeln nondet_random Klasse.Hör zu!:-)

Andere Tipps

Die wissenschaftliche Gnu-Bibliothek (GSL) verfügt über einen ziemlich umfangreichen Satz an RN-Generatoren, Testkabeln usw.Wenn Sie Linux verwenden, ist es wahrscheinlich bereits auf Ihrem System verfügbar.

Achten Sie auf die Gnu Scientific Library.Es ist unter der GPL und nicht unter der LGPL lizenziert.

Wie bereits erwähnt, sind die Boost-Zufallsklassen ein guter Anfang.Ihre Implementierung entspricht dem für TR1 vorgesehenen PRNG-Code:

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

Wenn Sie eine aktuelle Version des G++-Compilers haben, sind die TR1-Bibliotheken möglicherweise bereits enthalten

C++11 hat eine robuste Zufallszahlenbibliothek basierend auf boost.random übernommen.Sie können auf eine Reihe von Zufallszahlen-Engines mit unterschiedlichen Algorithmen zugreifen, um Ihren Qualitäts-, Geschwindigkeits- oder Größenanforderungen gerecht zu werden.Hochwertige Implementierungen ermöglichen sogar Zugriff auf alle nicht deterministischen RNGs, die Ihre Plattform anbietet std::random_device.

Darüber hinaus gibt es viele Adapter zum Erstellen spezifischer Distributionen, sodass keine manuelle Manipulation erforderlich ist (was häufig falsch erfolgt).

#include <random>

Boost.Random ist meine erste Wahl für RNG

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top