IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

problème #IND et #INF


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 11
    Points : 5
    Points
    5
    Par défaut problème #IND et #INF
    Bonjour tout le monde,

    j'ai ce programme pour le calcule de la somme "s" et la somme carrée "v" d'une variable aléatoire x, lors de l'exécution pour N grand il me donne #IND ou #INF. qlq peut m'aider SVP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #include <cmath>
    #include <cstdlib>
    #include <iostream>
    #include <fstream>
    #include <math.h>
    #include <string>
    #include <ctime>
     
    // monte carlo pour une variable aléatoire exponenetielle de paramètre lambda
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
    float x,U,s,v;
    int N=100000;  
    float lambda=2;
     
    srand(time(NULL));                         
    s=0; v=0;    // initialisation de la somme de la variable aléatoire (somme de x et x^2)
                for(int i=0;i<N;i++)
     
                    {
                        U=(float)rand()/((float)RAND_MAX+1.0);
     
                         x= (-1/lambda)*log(U);
     
                         s=s+x; 
                         v=v+x*x;
                         cout<<"s="<<s<<endl;
                         cout<<"v="<<v<<endl;
     
     
                     } 
     
     
               system("pause");
    return EXIT_SUCCESS;
    }

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Points : 193
    Points
    193
    Par défaut
    Bonjour

    Un variable int va de -32 768 à 32 767, or toi tu l'initialise à 100000. Ce qui est trop grand. Pour palier, tu peux utiliser un d'autres type, ou bien limiter ta valeurs N à quelque chose de raisonnable.

    Je pense que ca vient de là, après, il se peut que je soit à coté de la plaque.

    Cordialement,
    PKO

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    en fait N est le nombre pour lequel la boucle for tourne, donc pour une bonne précision de mes calculs, il faut que je mets un nombre très grand.

  4. #4
    screetch
    Invité(e)
    Par défaut
    N va trés bien, les entiers vont jusque 2 milliards.
    mais log(0) ca n'est pas défini

    si U se rapproche de 0, log(U) tend vers -infini, et la variable flottante peut alors atteindre de très (trop) grandes valeurs. cette probabilité augmente lorsque N augmente.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par screetch Voir le message
    N va trés bien, les entiers vont jusque 2 milliards.
    mais log(0) ca n'est pas défini

    si U se rapproche de 0, log(U) tend vers -infini, et la variable flottante peut alors atteindre de très (trop) grandes valeurs. cette probabilité augmente lorsque N augmente.
    Mea culpa

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    comment je fais alors SVP

  7. #7
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Ben soit tu te débrouilles pour pas que u descendes trop prés de zéro, sinon tu utilises des bibliothèques adapté pour gérer les grands nombres (GMP par exemple .)

  8. #8
    screetch
    Invité(e)
    Par défaut
    en fait la question c'est comment tu fais quoi ? car la tu sembles faire un truc douteux d'un point de vue mathématique.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    je cherche à generer une variable aléatoire U uniforme entre (0 et 1), puis calculer la variable x qui suit une loi exponentielle "x= (-1/lambda)*log(U)", puis s qui est la somme des x et v qui est la somme des carrés de x. pour N echantillons

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    C'est un exercice de calcul numérique ou il y a un intérêt derrière?
    Si U prend ses valeurs dans ]0,1], alors x prend ses valeurs dans [0,+infini[.
    Donc ton calcul de somme et des carrés va dépasser le limites d'un pauvre type de base...
    Quel est le but de ces deux calculs ?

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    c'est pour calculer la moyenne des x et la variance

  12. #12
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par thasseda Voir le message
    c'est pour calculer la moyenne des x et la variance
    C'est pour un exercice de simulation numérique ? Ou c'est dans le cadre d'un pb concret ? En tout cas, je te conseille de creuser d'abord sur une approche mathématique pour trouver un algo d'estimation/de calcul qui ne tomberait pas dans ces problèmes. Tu peux te renseigner dans le forum mathématique en exposant ton pb sous ce point de vue.

Discussions similaires

  1. Problèmes avec WEB-INF : JSF
    Par le_misterioso dans le forum JSF
    Réponses: 0
    Dernier message: 31/05/2011, 02h45
  2. Petit problème avec autorun.inf
    Par LOBO1986 dans le forum Windows
    Réponses: 1
    Dernier message: 29/12/2010, 10h14
  3. Problème -1.#IND et -1.#INF
    Par Gafagarion dans le forum Débuter
    Réponses: 1
    Dernier message: 02/02/2008, 09h44
  4. Problème avec Autorun.inf
    Par cjacquel dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 21/12/2006, 13h30
  5. Réponses: 4
    Dernier message: 09/02/2006, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo