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 :

Precision des long double


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    inge info
    Inscrit en
    Juin 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : inge info

    Informations forums :
    Inscription : Juin 2010
    Messages : 34
    Par défaut Precision des long double
    Bonjour à tous !


    Alors aujourd'hui parlons double

    Je boss sur un programme qui utilise des long double avec plein de chiffres (en gros on est sur du 10^(-20)) mais j'ai des problèmes. Alors ces long double servent à calculer la position d'éléments et je vois bien que ces éléments ne sont pas là où ils le devraient quand ils le devraient.

    Après avoir perdu 3 jours a vérifier l'ensemble des arguments et tout ce qui m'est passés par la tête pouvant être a l'origine de ce mauvais placement je décide de faire un truc tout bête :

    j'ai un long double qui vaut : 0.08749837479571349900

    je decide de faire +0.01 pour voir le résultat et la j'obtiens

    0.09749837479571348400


    alors vous allez me dire que la différence est minime ce qui est généralement vrai mais c'est pas le cas dans le domaine dans lequel s'applique ce programme.

    Quelqu'un aurait il une idée pour régler ca?

    Merci pour ceux qui m'aideront à comprendre le pourquoi du comment

  2. #2
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Quelqu'un aurait il une idée pour régler ca?
    Régler quoi? c'est quoi le problème exactement? car la on sais que tu as un double à 0.08 et tu rajoute +0.01 et ça fait 0.09... mais bon apparemment il s'agit d'une erreur de calcul ou sinon on veux le code qui te sert a faire tes calculs :p

  3. #3
    Membre averti
    Profil pro
    inge info
    Inscrit en
    Juin 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : inge info

    Informations forums :
    Inscription : Juin 2010
    Messages : 34
    Par défaut
    le probleme c'est la fin du chiffre :


    9900 devient 8400 et c'est très genant

  4. #4
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918

  5. #5
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    Bonsoir,

    Citation Envoyé par CPT_Taverne Voir le message
    Alors ces long double servent à calculer la position d'éléments et je vois bien que ces éléments ne sont pas là où ils le devraient quand ils le devraient.
    Il faudrait que tu précises un petit peu ce que tu appelles la position d'un élément.
    S'agit-il de coordonnées de points?
    Explique un peu le contexte, ça sera plus facile de te répondre.


    Citation Envoyé par CPT_Taverne Voir le message
    Après avoir perdu 3 jours a vérifier l'ensemble des arguments et tout ce qui m'est passés par la tête pouvant être a l'origine de ce mauvais placement je décide de faire un truc tout bête :
    j'ai un long double qui vaut : 0.08749837479571349900
    je decide de faire +0.01 pour voir le résultat et la j'obtiens
    0.09749837479571348400
    Comme l'indique Joel F avec son lien, c'est normal.

    Citation Envoyé par CPT_Taverne Voir le message
    alors vous allez me dire que la différence est minime ce qui est généralement vrai mais c'est pas le cas dans le domaine dans lequel s'applique ce programme.
    Il faudrait que tu expliques pourquoi.
    On peut parfois mal interpréter ce genre de phénomène.
    Quelques exemples sont donnés dans le paragraphe 1.19 (page 28) de ce livre :
    http://books.google.fr/books?id=epil...page&q&f=false

    En fait, tout dépend de la manière dont se propage tes erreurs d'arrondi.
    Et cela dépend directement de ton algorithme.

  6. #6
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 68
    Par défaut
    Hello,

    Selon tes besoins, tu peux regarder des "astuces" telles que la sommation de Kahan et t'en inspirer pour simuler une précision encore plus importante.
    Par contre, ça devient intéressant qu'à partir de pas mal d'opérations, et c'est pas forcément cool à mettre en oeuvre (optimisations du compilo, portabilité...).

    Meilleure solution, utiliser une librairie qui permet une précision qui dépasse les besoins humains et extraterrestres : MPFR
    (qui n'a jamais rêvé de coder un nombre sur 1 kilo octet ? )

  7. #7
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    du moment ou il fait +0.01 qui n'a pas de representation parfaite en base2, c'ets mort ...

    Et j'aimerais bien connaitre le domaine d'appli ou une erreur de positionnement de 10 attometre est grave ...

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 469
    Par défaut
    Citation Envoyé par Joel F Voir le message
    Et j'aimerais bien connaitre le domaine d'appli ou une erreur de positionnement de 10 attometre est grave ...
    C'est en général une erreur de rapporter le calcul de précision à la mesure des distances (même si ça a l'air d'être son cas), justement parce qu'on a tendance à conclure un peu trop vite que, dans ce cas précis, ça n'a pas d'importance.

    Ça devient gênant lorsque ces nombres sont impliqués dans des progressions géométriques et que les erreurs se cumulent. Avec une raison à peu près égale à 2, l'imprécision progresse d'un bit à chaque itération si elle n'est pas contrôlée, et on comprend que passé 50 itérations, même la partie entière peut être affectée.

    Ça a d'ailleurs l'air d'être son cas, puisqu'il a relevé des positions irrégulières avant de mettre le doigt sur leur origine.

  9. #9
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    J'ai fait le raccourci justement à cause de cette histoire de position

    Neanmoins, l'erreur est de l'ordre de Eps<double>() donc bon ...

Discussions similaires

  1. Affichage long double
    Par slate dans le forum C++
    Réponses: 5
    Dernier message: 07/02/2006, 18h04
  2. requette qui renvoi des ligne double
    Par fehmitn dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/09/2004, 22h36
  3. Réponses: 4
    Dernier message: 12/09/2003, 11h38
  4. abs pour un long double
    Par barthelv dans le forum C
    Réponses: 2
    Dernier message: 23/07/2003, 16h16
  5. String -> long double (_strlold ?)
    Par haypo dans le forum C
    Réponses: 7
    Dernier message: 25/07/2002, 20h22

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