Question

Je recherche un RNG performant et raisonnablement robuste n'utilisant aucun matériel spécial.Il peut utiliser des méthodes mathématiques (Mersenne Twister, etc), il peut "collecter l'entropie" de la machine, peu importe.Sous Linux/etc, nous avons un drand48() qui génère 48 bits aléatoires.J'aimerais une fonction/classe similaire pour C++ ou C# qui peut générer plus de 32 bits aléatoires et dont les bits de poids faible sont tout aussi aléatoires que les bits de poids fort.

Il n'est pas nécessaire qu'il soit sécurisé cryptographiquement, mais il ne doit pas utiliser ni être basé sur le langage C. rand() ou .NET System.Random.

Tout code source, liens vers la source, etc.serait apprécié!A défaut, quel TYPE de RNG dois-je rechercher ?

Était-ce utile?

La solution

Pour le C++, Boost.Aléatoire c'est probablement ce que vous recherchez.Il prend en charge MT (parmi de nombreux autres algorithmes) et peut collecter l'entropie via le nondet_random classe.Vérifiez-le!:-)

Autres conseils

La bibliothèque scientifique Gnu (GSL) dispose d'un ensemble assez complet de générateurs RN, de harnais de test, etc.Si vous êtes sous Linux, il est probablement déjà disponible sur votre système.

Méfiez-vous de la bibliothèque scientifique Gnu.Il est sous licence GPL plutôt que LGPL.

Comme d'autres personnes l'ont mentionné, les classes aléatoires Boost sont un bon début.Leur implémentation est conforme au code PRNG prévu pour TR1 :

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

Si vous disposez d'une version récente du compilateur G++, vous trouverez peut-être les bibliothèques TR1 déjà incluses

C++11 a adopté une bibliothèque de nombres aléatoires robuste basée sur boost.random.Vous pouvez accéder à un certain nombre de moteurs de nombres aléatoires utilisant différents algorithmes pour répondre à vos exigences de qualité, de vitesse ou de taille.Des implémentations de qualité donneront même accès à tout RNG non déterministe proposé par votre plateforme via std::random_device.

De plus, il existe de nombreux adaptateurs pour produire des distributions spécifiques, éliminant ainsi le besoin d'effectuer une telle manipulation à la main (ce qui est souvent mal fait).

#include <random>

Boost.Random est mon premier choix pour le RNG

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top