c# - Robuste Zufallszahlengenerierung

Translate

Ich suche ein performantes, einigermaßen robustes RNG ohne spezielle Hardware. Es kann mathematische Methoden verwenden (Mersenne Twister usw.), es kann Entropie von der Maschine "sammeln", was auch immer. Unter Linux / etc haben wir einedrand48()das erzeugt 48 zufällige Bits. Ich hätte gerne eine ähnliche Funktion / Klasse für C ++ oder C #, die mehr als 32 Zufallsbits 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 basierenrand()oder .NETSystem.Random.

Jeder Quellcode, Links zur Quelle usw. wäre dankbar! Andernfalls sollte ich nach welcher Art von RNG suchen?

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Für C ++Boost.Randomist wahrscheinlich das, wonach Sie suchen. Es unterstützt MT (neben vielen anderen Algorithmen) und kann Entropie über das sammelnnondet_randomKlasse. Hör zu! :-)

Quelle
Translate

Die Gnu Scientific Library(GSL) verfügt über einen ziemlich umfangreichen Satz an RN-Generatoren, Testkabeln usw. Wenn Sie unter Linux arbeiten, ist dieser wahrscheinlich bereits auf Ihrem System verfügbar.

Quelle
Translate

Achten Sie auf die Gnu Scientific Library. Es ist eher unter der GPL als unter der LGPL lizenziert.

Wie andere bereits erwähnt haben, 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

Quelle
Translate

C ++ 11 hat eine robuste Zufallszahlenbibliothek basierend auf boost.random übernommen. Sie können mit verschiedenen Algorithmen auf eine Reihe von Zufallszahlen-Engines zugreifen, um Ihre Qualitäts-, Geschwindigkeits- oder Größenanforderungen zu erfüllen. Qualitätsimplementierungen bieten sogar Zugriff auf nicht deterministische RNG, über die Ihre Plattform bietetstd::random_device.

Darüber hinaus gibt es viele Adapter, mit denen bestimmte Verteilungen erstellt werden können, sodass solche Manipulationen nicht mehr von Hand durchgeführt werden müssen (was häufig falsch gemacht wird).

#include <random>

Quelle
Translate

Boost.Randomist meine erste Wahl für RNG

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

Quelle