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 numerique en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 52
    Par défaut precision numerique en C
    je suis debutant en c et je voudrais savoir comment augmenter la precision sur les chiffres, à savoir augmenter le nombre de decimales des chiffres

    suffit il de passer de float à double , voire a long double ?

    qui peut m expliquer le probleme ?merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut, fais tes calculs en double et non pas en float. Je crois que long double est la même chose que double (mais je n'en suis pas trop trop sûr).
    De toute manière, en double tu peux aller jusqu'à DBL_EPSILON (#include <float.h>) alors qu'en float tu vas jusqu'en FLT_EPSILON

  3. #3
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par salseropom
    Je crois que long double est la même chose que double (mais je n'en suis pas trop trop sûr).
    Ben non, evidemment (sinon ce n'est pas necessaire de l'inventer):
    Citation Envoyé par C ISO 99
    There are three real floating types, designated as float, double, and long
    double. The set of values of the type float is a subset of the set of values of the
    type double; the set of values of the type double is a subset of the set of values of the
    type long double.
    De toute manière, en double tu peux aller jusqu'à DBL_EPSILON (#include <float.h>) alors qu'en float tu vas jusqu'en FLT_EPSILON
    Plus precisement, FLT_EPSILON est la plus petite valeur telle que x + FLT_EPSILON est different de x.

    En general, le probleme du 'nombre de chiffres' apres la virgule se pose lorsqu'on affiche une valeur. Il faut jouer sur les formatteurs de *printf() pour changer ce nombre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    float value = 98.723;
    printf("%.0f\n", value); /* pas de chiffre apres la virgule */
    printf("%.3f\n", value); /* trois chiffres apres la virgule */

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 52
    Par défaut
    merci pour les infos
    par contre j arrive pas a trouver comment afficher un long double
    car printf("%.5lf",x) ou printf("%0.5f",x) ne marchent pas si x est un long double

  5. #5
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par informatik
    merci pour les infos
    par contre j arrive pas a trouver comment afficher un long double
    car printf("%.5lf",x) ou printf("%0.5f",x) ne marchent pas si x est un long double
    %Lf ou %LF apparemment : man printf

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 52
    Par défaut
    il semblerait qu il y ait une chose affreuse
    quand j utilise un double, en fait il n est codé que sur 17 chiffres significatifs en tout et pour tout donc plus il y a de chiffres avant la virgule, moins il y en a apres la virgule; c est ce que m indique un petit programme que j ai fait

    c est pas tres pratique pour le calcul numerique tout ça non ?

  7. #7
    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 DaZumba
    long double est la même chose que double
    Ben non, evidemment (sinon ce n'est pas necessaire de l'inventer):
    Je crois que Windows utilise la même représentation pour les deux types. C'est domage sur x86 car c'est un des rares (même s'il est répandu) processeur à avoir un support hard pour quelque chose de plus précis que les doubles (un flottant sur 80 bits). Linux utilise ce type. Sur ma sun au boulot, long double fait 128 bits.

  8. #8
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Je crois que Windows utilise la même représentation pour les deux types.
    Oui, j'ai ete imprecis. Je voulais dire que selon la norme, long double et double sont deux types differents, avec la garantie que l'ensemble des long double soit superieur ou egal a l'ensemble des double. Il semble que certaines implementations aient choisit le 'egal' !

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,
    Citation Envoyé par Jean-Marc.Bourguet
    Je crois que Windows utilise la même représentation pour les deux types. C'est domage sur x86 car c'est un des rares (même s'il est répandu) processeur à avoir un support hard pour quelque chose de plus précis que les doubles (un flottant sur 80 bits). Linux utilise ce type. Sur ma sun au boulot, long double fait 128 bits.
    Ce n'est pas Windows, ce sont certains compilateurs, et je ne doute pas que ce soit le cas également avec Linux.
    La norme est claire : c'est au choix de l'implémentation.

    Pour Windows :

    - Visual C++ de Microsoft utilise la même taille (8 octets) pour les double et les long double.

    - Pour GCC, sizeof(double) = 8. sizeof(log double) = 12, avec un piège dans ce cas : la taille effectivement utilisée = 10, les 2 octets de poids fort étant toujours à 0, et les 10 autres étant de fait au format flottant 10 octets de la FPU des processeurs Intel (peut-être d'autres procs aussi, vu que cette représentation est normalisée, je ne sais pas).

  10. #10
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Citation Envoyé par DaZumba
    Plus precisement, FLT_EPSILON est la plus petite valeur telle que x + FLT_EPSILON est different de x.
    Non,
    FLT_EPSILON est la plus petite valeur telle que 1.0f + FLT_EPSILON est different de 1.0f.

    Il faut toujours adapter le epsilon aux nombres comparées, en l'agrandissant ou le diminuant.

Discussions similaires

  1. precision sur le pilotage du port parallele
    Par fransouik dans le forum C++Builder
    Réponses: 18
    Dernier message: 26/02/2004, 13h28
  2. transformer string en numerique
    Par chrys76 dans le forum ASP
    Réponses: 14
    Dernier message: 05/12/2003, 13h27
  3. [VBA-E]Demande de précision sur les menus
    Par geffdenimes dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/06/2003, 10h46
  4. [VB6] [Flexgrid] Format d'affichage des numériques
    Par yansolo dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/10/2002, 21h00
  5. Generation d'evenements a une date precise
    Par pascalzzz dans le forum MFC
    Réponses: 2
    Dernier message: 04/06/2002, 15h21

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