Génération d'un chiffre aléatoire à partir d'une loi gaussienne - C - Programmation
Marsh Posté le 22-03-2006 à 13:28:30
Pour ceux que ca intéresse, j'ai trouvé ca sur le net :
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define NBV 1000
int main(void)
{
int i=0;
float x1, x2, w, y1, y2;
srand(time(NULL));
for (i=0;i<NBV;i++)
{
do
{
x1 = 2.0 * (float)rand()/RAND_MAX - 1.0;
x2 = 2.0 * (float)rand()/RAND_MAX - 1.0;
w = x1 * x1 + x2 * x2;
} while ( w >= 1.0 );
w = sqrt( (-2.0 * log(w) ) / w );
y1 = x1 * w;
y2 = x2 * w;
printf("%f %f\n",y1,y2);
}
return(0);
}
C'est pas très propre ni très beau mais ca me suffit...
Si vous avez d'autres propositions ...
Marsh Posté le 22-03-2006 à 14:08:42
julien_54 a écrit : Si vous avez d'autres propositions ... |
Tu devrais recoder ça avec des doubles... Plus précis, plus rapide...
Marsh Posté le 22-03-2006 à 15:16:26
J'ai fait quelques tests avec l'algo précédent et ça à l'air de bien générer une répartition gaussienne.
(il est certain qu'il faut repasser un peu sur le code pour le rendre un peu plus joli...mais sinon il marche à peu près bien)
Voilà, c'est pas courant que l'auteur d'une question réponde lui même, mais au moins si quelqun d'autre cherche ...
@+
Marsh Posté le 23-03-2006 à 11:15:51
Remarque hors de propos, mais quand même, tu génères un nombre, pas un chiffre...
Marsh Posté le 23-03-2006 à 11:39:01
Code :
|
le probleme avec ce genre de truc c'est que x2 dépend de x1, il n'est pas "aléatoire" par rapport à x1, donc w ne dépend que de x1
Marsh Posté le 23-03-2006 à 15:27:15
julien_54 a écrit : J'ai fait quelques tests avec l'algo précédent et ça à l'air de bien générer une répartition gaussienne. |
C vrai ; "Le chiffre (Fabriciana niobe) est un papillon de la famille des nymphalidés".
Marsh Posté le 23-03-2006 à 19:14:11
julien_54 a écrit :
|
Si t'es sur un Unixlike, utilise le getpid() pour srand dans ce style:
Code :
|
Ca te permet si tu lances ton pgm 2 fois dans un très court laps de temps style "pgm ; pgm" d'avoir quand-même une initialisation différente de srand() pour chaque processus générés...
Marsh Posté le 23-03-2006 à 19:59:11
il y a différents exemples d'implémentations sur la faq comp.lang.c
http://c-faq.com/lib/gaussian.html
Marsh Posté le 24-03-2006 à 15:36:50
Sve@r a écrit : Si t'es sur un Unixlike, utilise le getpid() pour srand dans ce style:
|
Pas mal ce petit truc, je tâcherai de m'en souvenir Merci
Marsh Posté le 24-03-2006 à 15:37:36
skelter a écrit : il y a différents exemples d'implémentations sur la faq comp.lang.c |
Très bonne source Merci
Marsh Posté le 22-03-2006 à 12:10:59
Bonjour,
Je recherche un code source assez simple (pas une bibliothèque de 20 fichiers permettant de refaire l'ensemble des maths ) permettant de générer un chiffre aléatoire à partir d'un loi gaussienne.
Genre je donne moyenne + écart type et il me donne une valeur aléatoire correspondante.
Si quelqun a ca sous le coude ca pourrait bien me dépanner (C'est pour faire des tests optimaux pour mon boulot, sans y passer 50 ans ... )
Merci d'avance !