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 d'un nombre en virgule flottante


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Precision d'un nombre en virgule flottante
    Bonsoir,
    Je possede un fichier (.txt) contenant des nombres en virgule flottante.
    cependant je souhaiterai pouvoir stocker ces nombres avec la precision exacte decrite dans le fichier.
    en utilisant la fonction atof sur chaque nombre, je recupere un double mais cela arrondi les nombres a 10^(-5) alors que je veux recuperer le nombre exacte (10^(-20), 10^(-100), etc en fonction de mon fichier).
    J'ai essaye d'utiliser des stream et des string mais cela ne fonctionne pas.

    Pouvez vous m'indiquer la marche a suivre s'il vous plait.
    Je vous en remercie d'avance.

    Bonne soiree.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Récupérer le nombre exact est impossible, les nombres dans le fichier sont en décimal (base 10) alors que les flottants (float, double, long double) sont stockés en mémoire en binaire (base 2).

    Et il n'y a pas de correspondance exact entre les deux représentations. Par exemple 1/10 s'écrit "0.1" en décimal mais s'écrit avec un nombre infini de chiffre en binaire (comme 1/3 en décimal).

    Cependant un double permet une précision d'environ 15 décimales, si tu n'en obtient que 5 ce n'est pas à la lecture qu'il y a perte de précision mais à l'affichage, c'est à dire au moment de la conversion inverse (binaire->décimal), conversion qui peut être le fait de ton débuggueur, de printf, ...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Hello,

    Voici la représentation mémoire des types en C++ :

    float Flottant (réel) 4 -3.4*10-38 à 3.4*1038
    double Flottant double 8 -1.7*10-308 à 1.7*10308
    long double Flottant double long 10 -3.4*10-4932 à 3.4*104932

    pour le formattage des sorties il y a les fonctions formattage du cout :

    ios::scientific Pour la notation scientifique (ex : 3.14e+01 )
    ios::fixed virgule flottante.
    cout precision pour fixer le nombre de digits après la virgule


Discussions similaires

  1. Représentation d'un nombre en virgule flottante
    Par phyfab dans le forum Mathématiques
    Réponses: 2
    Dernier message: 15/12/2009, 14h10
  2. rendre un nombre de virgule flottante en virgule fixe
    Par mitnick2006 dans le forum Général Java
    Réponses: 3
    Dernier message: 15/08/2008, 21h44
  3. nombre et virgule flottante
    Par malikakika dans le forum C++Builder
    Réponses: 1
    Dernier message: 02/02/2008, 23h31
  4. printf nombre a virgule flottante
    Par Toutankharton dans le forum C
    Réponses: 1
    Dernier message: 10/12/2006, 18h09
  5. 50.00 n'est pas un nombre en virgule flottante correct
    Par Merfolk dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/01/2006, 00h44

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