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 d'arrondi


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Par défaut
    Je poste ici car c'est dans le meme esprit.

    Je converti ma chaine de caractere en un double avec strtod.
    le nombre que je dois convertir possède plusieurs chiffres pour la partie entiere et 13 chiffres derriere la virgule.
    Le résultat est correct, sauf que je n'ai 'que' 6 chiffres significatifs différents de "0".

    Exemple: si la chaine initiale est 33.105847469531, le resultat sera 33.1058.
    Autre: -0.0219253376126 devient -0.0219253.

    Je ne sais pas comment faire pour recupérer plus de chiffres derriere la virgule et plus de chiffres tout court!
    A quel moment peut on definir la precision du double (à part à l'affichage)?
    Est ce que cette perte provient de l'utilisation de strtod?

    Merci d'avance.

    Laurent.

  2. #2
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    C'est peut être un problème d'affichage, perso lorsque je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc,char **argv) 
    { 
      double test;
     
      test = strtod("12334891.890773588526",NULL);
     
      printf("%30.30f\n",test);
     
      return EXIT_SUCCESS;
    }
    J'obtient ceci en résultat :

    12334891.890773588791489601135253906250
    J'ai donc bien plus de 6 décimales.

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par PRomu@ld
    C'est peut être un problème d'affichage, perso lorsque je fais ceci :
    <...>
    J'obtient ceci en résultat :
    12334891.890773588791489601135253906250
    J'ai donc bien plus de 6 décimales.
    Sont-elles significatives ?

    Avec mingw/Windows XP, j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    12334891.890773589000000000000000000000
    Ce qui me parait moins farfelu...

  4. #4
    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 Emmanuel Delahaye
    Citation Envoyé par PRomu@ld
    12334891.890773588791489601135253906250

    J'ai donc bien plus de 6 décimales.
    Sont-elles significatives ?

    Avec mingw/Windows XP, j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    12334891.890773589000000000000000000000
    Ce qui me parait moins farfelu...
    Tes zéros sont tout aussi peu significatifs que les chiffres de Promu@Id. Ceux-ci ont au moins l'avantage d'être vraissemblablement plus proche du rationnel stocké dans le flottant.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Par défaut
    Petite précision, cet affichage est réalisé avec un std::cout.
    C'est peut etre effectivement un pb d'affichage, mais je ne sais pas comment formater l'affichage avec un cout!

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par moi1
    Petite précision, cet affichage est réalisé avec un std::cout.
    C'est peut etre effectivement un pb d'affichage, mais je ne sais pas comment formater l'affichage avec un cout!
    Pas du C. Le C++, c'est à coté.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Par défaut
    Sorry!
    Donc pas de reponses parce que c'est pas le bon forum?
    Je dois reposer a coté?

    Ceci dit il est vrai qu'en faisant un printf, j'obtiens plus de decimales.
    j'ai demandé 10 decimales et je les ai eues!

    Je pense donc qu'il n'y a pas de pb.

    Merci quand meme.

    Laurent.

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par moi1
    Donc pas de reponses parce que c'est pas le bon forum?
    Tu ne voudrais pas une réponse fausse quand même...
    Je dois reposer a coté?
    Ben oui.

  9. #9
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Sont-elles significatives ?
    A non, pas du tout, je n'ai jamais dis ça.

    Tes zéros sont tout aussi peu significatifs que les chiffres de Promu@Id. Ceux-ci ont au moins l'avantage d'être vraissemblablement plus proche du rationnel stocké dans le flottant.
    C'est pour cela que je ne fais jamais confiance aux décimales d'un réel lorsque je ne connais pas à coup sur la façon dont il est implémenté et donc la marge d'erreur que celà implique.

Discussions similaires

  1. [BigDecimal] Problème d'arrondi
    Par Boosters dans le forum Langage
    Réponses: 4
    Dernier message: 29/08/2006, 09h31
  2. problème d'arrondi à 2 chiffres après virgule
    Par nerick dans le forum Langage
    Réponses: 1
    Dernier message: 05/01/2006, 17h26
  3. Problème d'arrondis
    Par steps5ive dans le forum Access
    Réponses: 5
    Dernier message: 09/12/2005, 17h35
  4. [DECIMAL] problème d'arrondi
    Par Boosters dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 28/11/2005, 15h30
  5. Problème d'arrondi
    Par ptitsoleil87 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/01/2005, 09h37

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