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 :

test sur un double


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 54
    Par défaut test sur un double
    Bonsoir,

    question basique mais :
    j'ai besoin à l'aide d'un test de m'assurer qu'un double (rho) soit strictement inférieur à 1.0, faire le test

    rho >= 1.0 est mauvais(je pense); comment choisir la précision(epsilon) du test
    de type rho >= 1.0-epsilon

    question connexe: remplacer le test "rho > 1.0" par "rho >= 1.0" dans le but de s'assurer que rho est strictement inférieur à 1.0 est bien ridicule?

  2. #2
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Effectivement,

    rho >= 1.0 ne te donnera pas le resultat souhaiter.

    c'est

    rho < 1.0

    qu'il faut utiliser.
    Ensuite, quand a la precision, je pense que ceux qui ont develloper le C++ ont du y penser.
    Enfin, je ne sais pas, donc je m'avance en pente glissante.

    Si j'etait toi, (mais je ne le suis pas) je prendrait comme acqui que 1.0 vaut effectivement 1.0000000 ... (je ne sais plus combien on en stock).

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 966
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 966
    Par défaut
    Bei,
    Citation Envoyé par SofEvans Voir le message
    Effectivement,

    rho >= 1.0 ne te donnera pas le resultat souhaiter.

    c'est

    rho < 1.0

    qu'il faut utiliser.
    C'est le même résultat, simplement inversé. Tout dépend donc de ce qu'on veut faire.

  4. #4
    Membre averti
    Inscrit en
    Février 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 54
    Par défaut
    ma question ne portait pas sur le sens de l'inégalité mais sur le sens du test

    si j'écris rho = 1.0 rien ne garantit que sa représentation en machine ne soit égale à 1.0, rho peut valoir 1.000000001, et c'est d'autant plus vrai si la valeur 1 a été affecté via une cascade de calcul.

    Sachant que tester si un double vaut 1 par (d == 1.0) est très mauvais, à mon avis c'est le même problème là, non?

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par mangeclous Voir le message
    si j'écris rho = 1.0 rien ne garantit que sa représentation en machine ne soit égale à 1.0, rho peut valoir 1.000000001, et
    1 est exactement représentable avec la norme classique sur les flottants, donc si tu écris rho = 1, tu es certain que rho vaut exactement 1.
    Citation Envoyé par mangeclous Voir le message
    c'est d'autant plus vrai si la valeur 1 a été affecté via une cascade de calcul.
    Là, c'est différent. Si tu donnes à rho le résultat d'une chaîn e de calculs, et que tu crois que ce résultat devrait être 1, il est possible que ce ne soit pas le cas est que tu aies une valeur approchée.
    Citation Envoyé par mangeclous Voir le message
    Sachant que tester si un double vaut 1 par (d == 1.0) est très mauvais, à mon avis c'est le même problème là, non?
    Je ne vois pas de problèmes à écrire if (rho<1) {...}. Mais il faut juste t'attendre à ce que ce test soit vrai si tu as assigné à rho la valeur 0.1+0.1+0.1+...+0.1.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    1 est exactement représentable avec la norme classique sur les flottants,
    Je ne connais pas de representation de flottants incapable de representer exactement de petits entiers (pour une notion de petit en rapport avec la taille de leur mantisse).

  7. #7
    Membre averti
    Inscrit en
    Février 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 54
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    1 est exactement représentable avec la norme classique sur les flottants, donc si tu écris rho = 1, tu es certain que rho vaut exactement 1.
    bizarre je crois me souvenir lors de debugs qu'une variable censée valoir 1 valait dans un add watch 1.000000000001, je te fais confiance.



    Je ne vois pas de problèmes à écrire if (rho<1) {...}. Mais il faut juste t'attendre à ce que ce test soit vrai si tu as assigné à rho la valeur 0.1+0.1+0.1+...+0.1.
    OK

    Thanks

  8. #8
    Membre averti
    Inscrit en
    Février 2007
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 54
    Par défaut
    merci pour les références je vais lire ça ce we. Sinon au sujet de

    Citation Envoyé par JolyLoic Voir le message
    1 est exactement représentable avec la norme classique sur les flottants, donc si tu écris rho = 1, tu es certain que rho vaut exactement 1.
    J'ai fait un add-in pour excel en cpp, où je passe en paramètre 0.1 pour une valeur, eh bien lors d'un debug j'ai pu constaté via un addwatch que la variable ne valait pas 1.0 exactement, quid ?

Discussions similaires

  1. Ouvrir un fichier sur un double-clic dans une TListBox
    Par SegmentationFault dans le forum Composants VCL
    Réponses: 4
    Dernier message: 09/08/2004, 17h22
  2. test sur un recordset
    Par georgeabitbol dans le forum ASP
    Réponses: 2
    Dernier message: 15/07/2004, 14h39
  3. [langage] Test sur un caractère
    Par GLDavid dans le forum Langage
    Réponses: 8
    Dernier message: 07/07/2004, 18h03
  4. test sur fichiers[forms9i]
    Par Challenger dans le forum Forms
    Réponses: 6
    Dernier message: 14/06/2004, 17h25
  5. Test sur un champs vide
    Par PrinceMaster77 dans le forum ASP
    Réponses: 2
    Dernier message: 27/04/2004, 12h54

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