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 avec <limits>


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Par défaut Problème avec <limits>
    Bonjour,

    J'ai un problème dont je ne parviens pas à trouver l'origine.
    Quand j'exécute le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <limits>
    #include <iostream>
     
    int main()
    {
    		double test_val=std::numeric_limits<double>::max()/10.;
    			std::cout<<"diff 1: "<<test_val-test_val<<"\n";
    			std::cout<<"diff 2 : "<<std::numeric_limits<double>::max()/10.-std::numeric_limits<double>::max()/10.<<"\n";
    }
    j'obtiens:


    diff 1: 0
    diff 2 : 4.99447e+290

    Sincèrement je ne sais pas trop quoi penser ...
    Est que quelqu'un pourrait compiler et exécuter ce petit programme et me dire ce qu'il
    obtient.
    L'idéal serait une personne qui utilise gnu gcc c++ version 4.0.1 sur Mandriva 2006.
    Merci.
    Amicalement,
    Michel

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Ma conf :

    mandriva 2007.1
    gcc version 4.1.2 20070302 (prerelease) (4.1.2-1mdv2007.1)

    résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    diff 1: 0
    diff 2 : 4.99447e+290
    Hope this will help !
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Par défaut
    Merci beaucoup !

    Ca ressemble bien à un bug ...

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Je ne sais pas, j'ai "bêtement" copié/collé ton code sans chercher à comprendre.

    Qu'est-ce que tu essayes de mettre en évidence ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Par défaut
    Les deux valeurs "diff 1" et "diff 2" devraient être nulles.
    C'est supposé faire la même différence.

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Cela me semble être un comportement normal, les opérations sur les flottants ce n'est pas du calcul symbolique, c'est du calcul numérique avec une précision finie.

  7. #7
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Philippines

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2005
    Messages : 244
    Par défaut
    C'est du au meme problème que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::numeric_limits<double>::max()-10 == std::numeric_limits<double>::max()
    Les flottant sont une approximation assez proche mais qu'une approximation des reels:

    en faisant:

    std::numeric_limits<double>::max()/10.-std::numeric_limits<double>::max()/10,

    Le programme te retourne le un resultat qui "approxime" zero, de la meme façon que parfois x/10-x/10 = 1.E-71 ou du genre.

    En fait, il faut comprendre que 4.99447e+290, c'est le plus petit "pas" pour un flottant aussi grand, c'est à dire que la valeur de la mantisse est multiplié par ce nombre.

    Je te propose d'aller jeter un coup d'oeil sur le net sur la norme IEEE 754, tu comprendras bien mieux que j'explique

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Par défaut
    Oui mais pourquoi les deux facons de calculer cette différence ne me retournent pas le même résultat ?

  9. #9
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Philippines

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2005
    Messages : 244
    Par défaut
    test_val-test_val doit etre optimisé par le compilateur qui se dit que "var moins var vaut zero", enfin j'imagine

Discussions similaires

  1. [Débutant] Problème avec les limites des axes x et y
    Par alexov dans le forum MATLAB
    Réponses: 4
    Dernier message: 18/05/2011, 17h27
  2. [XL-2003] Problème avec la limitation dans la minimisation par "Solver" Excel 2003
    Par snsr2007 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/06/2010, 11h16
  3. Problème avec un LIMIT
    Par mikadom dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 14/10/2008, 13h41
  4. Problème avec un LIMIT
    Par burhud dans le forum Hibernate
    Réponses: 6
    Dernier message: 07/08/2007, 22h30
  5. [VBA-E] Encore un problème avec les limites de RANGE
    Par durdesfois dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/07/2007, 19h56

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