c# - Génération de nombres aléatoires robuste

Translate

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. Sur Linux / etc, nous avons undrand48()qui génère 48 bits aléatoires. Je voudrais une fonction / classe similaire pour C ++ ou C # qui peut générer plus de 32 bits de caractère aléatoire et quels bits de poids faible sont tout aussi aléatoires que les bits de poids fort.

Il n'a pas besoin d'être sécurisé cryptographiquement mais il ne doit pas utiliser ou être basé sur le langage Crand()ou .NETSystem.Random.

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

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

Toutes les réponses

Translate

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

La source
Translate

La bibliothèque scientifique du Gnu(GSL) possède 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.

La source
Translate

Attention à 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 avez une version récente du compilateur G ++, vous pouvez trouver les bibliothèques TR1 déjà incluses

La source
Translate

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 en 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 viastd::random_device.

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

#include <random>

La source
Translate

Boost.Randomest mon premier choix pour RNG

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

La source