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 :

Précision du type float


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Précision du type float
    Bonjour,

    Une petite question sur le type float et sa précision (pour ma culture):

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <stdio.h>
     
    int main(void)
    {
        float nombre = 45.85F;
     
        printf("nombre:%f", nombre);   
        return 0;
     
    }
    qui me donne (compilateur borland) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    C:\Borland\TEST>a
    nombre:45.849998
    la précision du float n'est pas normalement assurée pour 6 digits ? Donc au pire je ne devrais pas avoir 45.8500xx ?

    Merci si quelqu'un à une info à ce sujet.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Problème classique d'arrondi avec les float, en général la précision est meilleure avec des double, mais ce n'est quand même pas terrible.
    Le problème vient du codage mémoire.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre régulier
    Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 89
    Points : 106
    Points
    106
    Par défaut
    Au passage, quelqu'un aurait-il un document (ou une explication ^^) traitant de la représentation en binaire d'un nombre de type float ou double (j'ai toujours eu du mal à me faire à l'idée de stocker une précision de 6 à 10 chiffres après la virgule respectivement avec 4 ou 8octets )
    Merci

  4. #4
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Pour représenter un nombre flottant, on utilise souvent un bit de signe suivi deux nombres (entiers) appelés mantisse et exposant. Un simple calcul basé sur les puissances permet d'obtenir le nombre que l'on veut représenter.

    Pour plus de détails :
    http://en.wikipedia.org/wiki/IEEE_floating-point_standard
    http://docs.sun.com/source/806-3568/ncg_goldberg.html (je n'ai pas lu, mais ca a l'air vraiment complet)

  5. #5
    Membre régulier
    Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 89
    Points : 106
    Points
    106
    Par défaut
    Merci beaucoup LLB je vais aller voir tout ça

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    C:\Borland\TEST>a
    nombre:45.849998
    la précision du float n'est pas normalement assurée pour 6 digits ? Donc au pire je ne devrais pas avoir 45.8500xx ?
    L'erreur porte sur le 8 ieme chiffre (le 8 ) elle est de 0.000002. La précision obtenue est meilleure que 5 10-8.
    Ne pas te fier aux apparences de l'écriture des nombres: Par exemple , le nombre 45.850005 est moins proche de 45.85 que celui que tu obtiens : l'erreur est de 0.000005.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

Discussions similaires

  1. Précision du type float
    Par SAM_92 dans le forum Langage
    Réponses: 8
    Dernier message: 26/12/2014, 14h04
  2. Précision de types en perl
    Par Gnux dans le forum Langage
    Réponses: 7
    Dernier message: 08/11/2005, 08h31
  3. insérer une valeur de type float dans une abse de données
    Par Stephane_br dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/11/2005, 10h47
  4. Pb de formatage de champs de type float
    Par FrankyNormand dans le forum XMLRAD
    Réponses: 9
    Dernier message: 05/05/2005, 12h37
  5. [MS-SQL][ADO] précision du type FLOAT
    Par Le Lézard dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/09/2004, 15h30

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