je cherche un generateur de variable pseudo alétoire uniforme entre 0 et 1
merci
Version imprimable
je cherche un generateur de variable pseudo alétoire uniforme entre 0 et 1
merci
C'est quoi "uniforme" ? Cela veut dire quoi pour toi ?
sinon, rand() fournit un générateur pseudo aléatoire congruent.
Tu peux aussi regarder dans le chapitre 9 de Introduction à la Cryptographie qui traite des générateurs de nombres aléatoires.
Au fait, tu ne trouveras pas de générateurs de nombres réels entre 0 et 1. Tu trouveras des générateurs de nombres entiers dont les bornes sont connues et après, ce sera à toi de faire un changement de repère.
en fait je genere des variables aléatoires entre 0 et 1 qui est U et puisque je travail avec une loi exponentielle donc j'ai X=-1/lambda* log(U)
donc il me donne un resultat qui est #-inf
J'avoue, j'ai pas bien compris :koi:
Et tu ne réponds pas à ma question:
Sinon, quelques URL :
ça doit être l'ensemble E = ]0,1] ;)
Ouai peut être sauf que si il descend très proche de zéro, les types primitifs le supporteront pas..
En prenant cette fonction de base tu dois arriver à faire un truc bien :
Code:
1
2
3
4
5 float random( const float min, const float max) { return min + rand()/(float)RAND_MAX * ( max - min ); }
Pseudo aléatoire, oui.
Oui mais est ce que c'est un générateur uniforme comme demandé ?
Bonjour,
FAQ et une doc de Jean-Marc Bourguet assez intéressante à lire.
Boost.Random propose aussi des choses.
Pour ton problème sur X=-1/lambda* log(U), l'origine n'est pas dans U mais dans log(U). Dès que ton tirage sur U va être petit, X va tendre vers l'infini -> d'où l'erreur du #-inf. Soit tu veux estimer ta moyenne et ta variance par du calcul 'bourrin' (somme/n et somme(ecart)/n) et alors il te faut passer par une librairie qui te permettent de gérer les grands nombres, soit tu creuse l'aspect mathématique pour trouver une autre méthode d'estimation.
Utilise Boost.Random, ça fait tout proprement.
Sauf que son problème est d'estimer la moyenne et la variance d'une variable aléatoire qui suit une loi X= (-1/lambda)*log(U) avec lambda constante et U une variable aléatoire uniforme entre 0 et 1. Quelque soit le générateur qu'il utilise pour U, il va avoir des problèmes dès qu'il va faire un tirage avec u trop petit -> log(u) va dépasser.
A mon avis, il faut creuser sur les algos mathématiques d'estimation de moyennes et de variance et ne pas essayer de la calculer à partir de tirage.
Question bête : as-tu représenté ta courbe pour avoir au moins une idée intuitive de ce que tu cherches?
Je viens de regarder 3 implémentations, c'est vrai pour une seule d'entre elle -- et pas la plus commune des 3. Les deux autres sont basées sur un générateur à concurence linéaire avec des modifications (différentes dans les deux) destinées à en éliminer les défauts principaux.
Typiquement, rand, c'est un mersenne twister, donc uniforme.
Tu peux donner une implémentation qui soit typique d'après toi? Je doute que Windows ait un mersenne twister pour rand() -- son RAND_MAX à 32767 me fait penser à l'utilisation du générateur de la norme C, un par congruence linéaire dont on jette les bits de poids faibles -- et j'ai regardé les implémentions de Linux (congruence linéaire trafiqué), Solaris (qui a celui de la norme C) et FreeBSD (un par congruence linéaire). J'ai du mal à appeler typique quelque chose qui ne soit vrai sur aucune de ces plateformes.
Il me semblait que c'était un mersenne twister. C'est vraiment archi nul rand() du coup...