2008-08-03 10 views
34

Ich bin auf der Suche nach einem performanten, einigermaßen robusten 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 einen drand48(), der 48 zufällige Bits erzeugt. Ich möchte eine ähnliche Funktion/Klasse für C++ oder C#, die mehr als 32 Bit der Zufälligkeit erzeugen kann und welche niederwertigen Bits sind genauso zufällig wie höherwertige Bits.Robust Random Number Generation

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

Jeder Quellcode, Links zur Quelle, etc. würden geschätzt! Wenn ich das nicht tun sollte, nach welcher Art von RNG sollte ich suchen?

+0

Warum nicht 'System.Random'? Ich weiß, dass 'Rand' schlecht ist, ist' System.Random' auch schlecht? Wenn ja, das ist traurig :( –

+3

Die Begründung für das Schließen dieser Frage scheint überhaupt nicht korrekt. – bames53

+0

@ bames53 Ich habe eine erneute Abstimmung jetzt gepostet. Sie scheinen genug Rep auch zu haben, also tun Sie es. :-D –

Antwort

27

Für C++, Boost.Random ist wahrscheinlich, was Sie suchen. Es hat Unterstützung für MT (neben vielen anderen Algorithmen) und kann Entropie über die nondet_random Klasse sammeln. Hör zu! :

8

The Gnu Scientific Library (GSL) hat eine ziemlich umfangreiche Reihe von RN-Generatoren, Test-Kabelbaum usw. Wenn Sie auf Linux sind, ist es wahrscheinlich bereits auf Ihrem System verfügbar.

2

Boost.Random ist meine erste Wahl für RNG

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

+0

Sie können Boost zufällig finden, indem Sie nur googlen, warum ich keine Links zur Verfügung stelle. Jetzt habe ich es mit dem Link zu Lib aktualisiert. –

5

C++ 11 hat eine robuste Zufallszahl Bibliothek angenommen basierend auf boost .zufällig. Sie können auf eine Reihe von Zufallszahlen-Engines zugreifen, die verschiedene Algorithmen verwenden, um Ihre Qualitäts-, Geschwindigkeits- oder Größenanforderungen zu erfüllen. Qualitätsimplementierungen bieten sogar Zugriff auf alle nichtdeterministischen RNGs, die Ihre Plattform über std::random_device anbietet.

Darüber hinaus gibt es viele Adapter, um bestimmte Distributionen zu erzeugen, was die Notwendigkeit einer solchen manuellen Manipulation eliminiert (was oft falsch gemacht wird).

#include <random>