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 :

connaitre la véritable valeur d'un double


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 97
    Par défaut connaitre la véritable valeur d'un double
    bonjour à tous,

    je suis devant un petit problème lié à la précision des double.
    explication :
    je lit des flottant dans un fichier texte et stocke le résultat dans un double.
    ex: "1.125487415" devient 1.12548741499999992
    ok ça ne me gène pas.
    sauf que par la suite je souhaite stocker cette valeur dans un nouveau fichier texte.
    par defaut il me tronque le texte à "1.125487" et j'aimerai bien retrouver exactement la valeur d'origine "1.125487415" dans mon txt.

    je pourrais très bien faire un precision(9) juste avant mais mes chiffres lus à l'origine n'ont pas tous la même précision. je peut très bien lire "1.125" ou "1.1254874" etc... et je dois restocker les variables à l'identique.

    donc comment faire pour qu'il sache automatiquement que 1.12548741499999992 doit être écrit "1.125487415" et que 1.1249999997 doit être écrit "1.125"

    je sais pas si c'est bien clair mes explications.

    en résumé:
    si mon fichier source est
    1.123456
    -0.232
    -1.23157684

    je souhaite que mon fichier destination soit identique et nom pas
    1.1233
    -0.232
    -1.2346
    ou
    1.12345600
    -0.23200000
    -1.23157684
    ou
    1.12345599999
    -0.2320000000
    -1.231576840001
    etc...


    des avis ?

  2. #2
    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
    Lire et stocker ces nombres sous forme de texte, et non pas de flottant ?
    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.

  3. #3
    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
    Lire et stocker ces nombres sous forme de texte, et non pas de flottant ?
    C'est le plus sur. Sinon

    http://www.cs.indiana.edu/~burger/FP...ing-PLDI96.pdf

  4. #4
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Mort de rire, je crois que je prendrais la version texte

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 97
    Par défaut
    hum j'y avais pensé de travailler en texte mais je fais des calculs sur ces double et faire des calcul sur du texte c'est pas evident :p


    merci pour le pdf je vais faire chauffer les neuronnes ... quoi que dans le titre "Printing Floating : Point Numbers Quickly and Accurately"
    ça devrait être vite fais donc

  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 mandagor Voir le message
    hum j'y avais pensé de travailler en texte mais je fais des calculs sur ces double et faire des calcul sur du texte c'est pas evident :p


    merci pour le pdf je vais faire chauffer les neuronnes ... quoi que dans le titre "Printing Floating : Point Numbers Quickly and Accurately"
    ça devrait être vite fais donc
    Ne pas oublier que scheme a d'office les entiers en precision non bornee :-)

  7. #7
    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 mandagor Voir le message
    hum j'y avais pensé de travailler en texte mais je fais des calculs sur ces double et faire des calcul sur du texte c'est pas evident :p
    Je pensais en fait à un double chargement. Une fois pour les calculs, l'autre pour le respect de l'affichage.
    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.

  8. #8
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    J'avais compris qu'il voulait aussi afficher le resultat des calculs -- si on en fait rien, j'ai une petite optimisation en vue :-)

    Mais attention aux arrondis dans les calculs. Une facon de les cacher est d'augmenter m+ et m- dans l'algo de l'article.

  9. #9
    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
    Moi aussi, mais j'avais compris qu'il voulait afficher un truc genre :
    Nombre initial : Résultat

    Avec "Nombre initial" exactement égal à ce qu'il est dans le fichier. Et j'ai peur que pour ça ta proposition n'aide pas. Si dans le fichier en entrée, il a par exemple :

    1.12345599999
    1.123456

    En supposant que ces deux nombre aient exactement la même représentation interne. L'algorithme que tu proposes va pour les deux afficher le même texte.

    Pour "Résultat", le problème est autre.

    En gros, veut-on afficher le texte le plus "économique", ou bien le texte d'entrée, quel qu'il soit ?
    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.

  10. #10
    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
    En supposant que ces deux nombre aient exactement la même représentation interne. L'algorithme que tu proposes va pour les deux afficher le même texte.
    Difficile de faire autrement en restant deterministe :-)

  11. #11
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Tu peux stocker quelque part la précision avec laquelle tu as lu le nombre, et le restituer avec cette même précision.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 97
    Par défaut
    en fait je peut avoir deux cas :
    soit le nombre final est celui en entrée
    soit le nombre final est un calcul fait sur celui en entrée


    et comme JolyLoic l'a dit je peux tres bien avoir
    n1=1.12345599999
    n2=1.123456
    en entrée

    et en sortie vouloir
    n1=1.12345599999
    n2=1.123456
    n3(n1-n2)=0.0000099999

    l'idée de stocker la precision des nombres en entrée est aussi peut-être un moyen. (y a une fonction c++ qui permet de connaitre directement le nombre de décimal avant que ça soit faussé par le stockage dans un double ?)

  13. #13
    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 mandagor Voir le message
    en fait je peut avoir deux cas :
    soit le nombre final est celui en entrée
    soit le nombre final est un calcul fait sur celui en entrée


    et comme JolyLoic l'a dit je peux tres bien avoir
    n1=1.12345599999
    n2=1.123456
    en entrée

    et en sortie vouloir
    n1=1.12345599999
    n2=1.123456
    n3(n1-n2)=0.0000099999
    Si n1 et n2 ont la meme representation en tant que double -- ce ne sera pas le cas avec les nombres montres, il va falloir voir du cote des flottants en precision non bornee, genre mpfr, pour faire les calculs.

    Et la question de Loic portait justement sur ces cas la. Peut-etre plus facile a voir:
    0.1
    1E-1
    est-ce qu'il faut garder ces formes ou pas?

  14. #14
    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
    Par défaut
    Si cela a un sens dans ton algo, tu peux maintenir tes données d'entrée en texte et ne les convertir en double que là où elles sont utilisées pour le calcul. Pour ta sortie, tu n'as pas perdu leur format initial.
    [EDIT] : pour connaître la 'précision' que tu avais en entrée, tu les lis en texte, détermine la précision et convertir ensuite en double.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 97
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Si n1 et n2 ont la meme representation en tant que double -- ce ne sera pas le cas avec les nombres montres, il va falloir voir du cote des flottants en precision non bornee, genre mpfr, pour faire les calculs.

    Et la question de Loic portait justement sur ces cas la. Peut-etre plus facile a voir:
    0.1
    1E-1
    est-ce qu'il faut garder ces formes ou pas?
    ->ok

    ->0.1 oui, 1e-1 non je n'ai pas de représentation scientifique dans les données en entrée

  16. #16
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    L'option plus poussée ensuite consiste à te créer ta propre classe pour gérer des nombres sans limite de précision et de taille. Mais sur la page des mpfr j'ai vu qu'il y avait des wrapper C++ pour la bibliothèque, alors tu n'auras peut-être pas à la coder toi-même.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 97
    Par défaut
    ok merci, je pense m'en sortir avec les informations que vous m'avez fourni

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sortie des valeurs de type double
    Par otspot dans le forum C++
    Réponses: 2
    Dernier message: 29/06/2008, 20h26
  2. Réponses: 14
    Dernier message: 30/05/2008, 17h04
  3. Réponses: 5
    Dernier message: 05/09/2007, 16h23
  4. Valeur d'un Double
    Par gids01 dans le forum Langage
    Réponses: 2
    Dernier message: 29/05/2007, 09h21
  5. [script SQL] quel valeur pour un double
    Par chouchou93 dans le forum Oracle
    Réponses: 1
    Dernier message: 29/05/2006, 12h55

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