Robuste génération de nombres aléatoires

voix
34

Je suis à la recherche d'un RNG performant, raisonnablement robuste en utilisant aucun matériel spécial. Il peut utiliser des méthodes mathématiques (Mersenne Twister, etc.), il peut « recueillir l' entropie » de la machine, peu importe. Sous Linux / etc , nous avons un drand48()qui génère 48 bits aléatoires. Je voudrais une fonction similaire / classe C ++ ou C # qui peuvent générer plus de 32 bits d'aléa et qui bits de poids faible sont tout aussi aléatoire en tant que bits d'ordre élevé.

Il ne doit pas être sûr mais il cryptographiquement ne doit pas utiliser ou se fonder sur le langage C rand()ou .NET System.Random.

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

Créé 03/08/2008 à 03:05
source utilisateur
Dans d'autres langues...                            


5 réponses

voix
27

C ++, Boost.Random est probablement ce que vous cherchez. Il a le soutien de MT (parmi beaucoup d' autres algorithmes), et peut recueillir l' entropie par la nondet_randomclasse. Vérifiez-le! :-)

Créé 03/08/2008 à 03:18
source utilisateur

voix
8

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

Créé 03/08/2008 à 03:26
source utilisateur

voix
7

Attention à la Gnu Scientific Library. Il est distribué sous licence GPL plutôt que LGPL.

Comme d'autres personnes mentionnées, les classes aléatoires Boost sont un bon début. Leur mise en œuvre 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 avez une version récente du compilateur du G, vous pouvez trouver les bibliothèques TR1 déjà inclus

Créé 13/08/2008 à 19:08
source utilisateur

voix
5

C ++ 11 a adopté une bibliothèque de nombres aléatoires robuste basé sur boost.random. Vous pouvez accéder à un certain nombre de moteurs de nombres aléatoires en utilisant différents algorithmes pour répondre à votre qualité, la vitesse ou les exigences de taille. Les mises en œuvre de qualité vont même fournir un accès à tout RNG non-déterministe votre plate - forme offre via std::random_device.

En outre, il existe de nombreux adaptateurs pour produire des distributions spécifiques, ce qui élimine la nécessité de faire une telle manipulation à la main (souvent quelque chose de mal fait).

#include <random>

Créé 26/06/2012 à 17:05
source utilisateur

voix
2

Boost.Random est mon premier choix pour RNG

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

Créé 29/03/2012 à 11:32
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more