Problèmes de la fonction random.
ll est bien connu que les générateurs de nombres aléatoires des librairies classiques (gcc, …) qui produisent une suite de nombres “pseudo aléatoires” entre 0 et 1 (selon une loi uniforme [0 1) présentent un défaut majeur pour les “applications critiques” : ils font apparaître une périodicité et qui plus est, assez courte…
plusieurs pistes pour palier le problème :
– La fonction drand48() fonctionne assez correctement, dans ce sens que sa période (que tout générateur possède) est suffisamment longue pour les applications actuelles, semble-t-il ; il y a, aussi, la bibliothèque écrite par Martin Lüscher,
http://luscher.web.cern.ch/luscher/ranlux/index.html
qui possède plusieurs avantages pratiques-un, par exemple, est la possibilité de préciser
le niveau de “complexité’’ (luxury level 🙂 )
– Il y a en C++ http://www-personal.umich.edu/ wagnerr/MersenneTwister.html
tiré de
// M. Matsumoto and T. Nishimura, “Mersenne Twister : A 623-Dimensionally
// Equidistributed Uniform Pseudo-Random Number Generator”, ACM Transactions on
// Modeling and Computer Simulation, Vol. 8, No. 1, January 1998, pp 3-30.
Mais c’est en 32 bits.
– La librairie GSL du projet GNU propose des implémentations de différents
générateurs de nombres aléatoires tel que la fameuse méthode de Mersenne
Twister :
http://www.gnu.org/software/gsl/manual/html_node/Random-number-generator-algorithms.html
J’ignore si ça répond à vos besoins, mais cette méthode a de bonnes propriétés
en terme de périodicité.
– Mersenne Twister (http://www.math.sci.hiroshima-u.ac.jp/ m-mat/MT/emt.html)
– Makoto Matsumoto a déménagé (Keio
une piste : générer des nombres aléatoires uniformes en parallèle grâce aux fonction développées par Pierre L’Ecuyer (fonctions RngStreams http://www.iro.umontreal.ca/~lecuyer/).
à compléter corriger partager …
Frédéric

