Précision d'un double ?

Signaler
Messages postés
64
Date d'inscription
vendredi 16 septembre 2005
Statut
Membre
Dernière intervention
31 mars 2009
-
Messages postés
64
Date d'inscription
vendredi 16 septembre 2005
Statut
Membre
Dernière intervention
31 mars 2009
-
Quand je fais
toto = 1.173222385022386;

Alors toto prend comme valeurs 1.1732223850224.

L'enfoiré me coupe des décimals ... comment faire pour tout garder ?

Merci !

11 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Comment tu fais pour afficher ton double ?

L'enfoiré c'est pas le "pc", mais le programmeur qui est débile. (ca s'adresse pas a toi, mais c'est le cas général)
Messages postés
64
Date d'inscription
vendredi 16 septembre 2005
Statut
Membre
Dernière intervention
31 mars 2009
1
lol j'suis d'accord pour l'enfoirer :P

Je ne l'affiche pas c'est une variable interne mais lorsque je trace avec le debug c'est evident que je me suis fait couper des décimals...

Quelqu'un a une solution parce qu'on parle de milli-metre et la précision est extremement importante !
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
C'est peut-être l'afficheur qui n'affiche pas toutes les décimales.
Utilises-tu printf ? cout ?
Messages postés
64
Date d'inscription
vendredi 16 septembre 2005
Statut
Membre
Dernière intervention
31 mars 2009
1
nenon c'est pas l'affichage si sa serais uniquement ca j'utiliserais la fonction precision() :/
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Essai:


std::cout.precision(20);

std::cout << ton_reel << std::endl;
Messages postés
64
Date d'inscription
vendredi 16 septembre 2005
Statut
Membre
Dernière intervention
31 mars 2009
1
Ca marche pas c'est directement lorsque j'assigne que mes décimal sont tronquée.

Des que je fais toto = 1.173222385022386;
toto a été arrondit automatiquement ....
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Mais il me semble que la précision des double c'est du 10^-16, donc il
tronque à peu près a la 16eme décimal. Il pourra pas aller plus loin de
toute facon.
Messages postés
64
Date d'inscription
vendredi 16 septembre 2005
Statut
Membre
Dernière intervention
31 mars 2009
1
Ouias parfais mais alors je fais quoi moi ?

Et en plus il me garde pas 16 décimal justement ... c'est la le probleme ...


Solution ? Help :S
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
Un double ne sauve pas que des décimales mais aussi la partie entière...

Un bon lien vers un forum ou où une question similaire a été posée.
http://www.experts-exchange.com/Programming/Programming_Languages/C/Q_20923717.html
Messages postés
64
Date d'inscription
vendredi 16 septembre 2005
Statut
Membre
Dernière intervention
31 mars 2009
1
Merci pour le lien mais c est payant ce fichu site la :(

Mais bon j'explique mon probleme un peu mieux
Je recoit un double qui vaut 1.173222385022386
Je le met dans le fichier cool j'ai 1.173222385022386
Je relit le fichier cool j'ai 1.173222385022386
Je remet la valeur dans le meme double , fuck j'ai 1.1732223850224

Pourquoi la est la question !
Messages postés
64
Date d'inscription
vendredi 16 septembre 2005
Statut
Membre
Dernière intervention
31 mars 2009
1
J'ai résolut mon problème d'une autre facon mais regarder celle la elle en vaut la peine !

HSValue=1.18286829466829420000; // Mon double est tronquer a 1.1828682946683

//J'ecrit dans un fichier
m_LogFile.open(LOG_HEIGHT_SENSOR_FILE,ios::out | ios::trunc);
m_LogFile << HSValue;
m_LogFile.flush();

//Devine la valeur que j'ai dans le fichier ... 1.18286829466829420000
//Ouin c beau la vie ....