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 :

Nb de chiffres après la virgule ?


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 43
    Points : 134
    Points
    134
    Par défaut Nb de chiffres après la virgule ?
    Bonjour,
    J'ai créé un programme en C faisant des des calculs dans R.
    Le problème vient du nombre de chiffres après la virgule : en utilisant des variables du type "float" le programme me renvoie des chiffres avec seulement 6 chiffres après la virgule.
    Est-il possible d'en afficher plus ?
    Merci d'avance pour vos réponses !

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Points : 253
    Points
    253
    Par défaut
    SAlut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <stdio.h>
     
    main()
    {
      float f=12.12154541;
      double d=12.15415415454641;
      printf("%.8f\n",f);
      printf("%.20f\n",d);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    E:\home\test>gcc test.c
     
    E:\home\test>a.exe
    12.12154579
    12.15415415454641000000
     
    E:\home\test>
    En bref, pour résumer, %.n(type) ou n represente le nombre de chiffres a afficher.
    A bientot
    TOUT CE QUI EST VRAISEMBLABLE N'EST PAS FORCEMENT VRAI . MEFIEZ VOUS

  3. #3
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 332
    Points : 130 092
    Points
    130 092
    Billets dans le blog
    1
    Par défaut
    En complément à ce qu'à dit KORTA, il faut savoir qu'une variable de type float ne peut avoir que 7 chiffres dont 6 significatifs (en notation scientifique). Si tu as besoin de plus précision, il te faut absolument utiliser le type double, qui possède 15 chiffres dont 14 significatifs. Pour avoir encore plus, tu peux utiliser long double, avec 19 chiffres dont 18 significatifs, auxquels cas remplace %f par %lf dans des printf(). L'utilisation de long double n'est pas recommandé.
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  4. #4
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Anomaly, qu'est-ce que tu veux dire par n chiffres dont (n-1) significatifs ???

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 43
    Points : 134
    Points
    134
    Par défaut
    de vos réponses !!!
    Sujet : !

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Points : 325
    Points
    325
    Par défaut
    Citation Envoyé par Eusebius
    Anomaly, qu'est-ce que tu veux dire par n chiffres dont (n-1) significatifs ???
    en simplifié inutile d'en afficher plus...

    si tu veux plus de details il faut te poser la question de savoir comment sont représentés les nombres en mémoire, et la tu verra q'entre le nombre en base 10 que tu entre dans la machine, et la valeur stokée en memoire, il y a une erreur due à la representation binaire (0.1 sera arrondi par exemple) puis une nouvelle erreur sera commise lors de l'affichage à cause de la retranscritpion en base 10... souvent ces erreurs s'annulent (c'est le cas pour 0.1) mais pas toujours d'ou une perte de precision et donc une perte de nombres significatifs...

    bien entendu il ne s'agit pas là du nombre de chiffres significatifs de la valeur qui e été entrée qui lui est généralement plutot de l'ordre de 3 ou 4...

  7. #7
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    encore plus fort sur visual ( je sais pas du tout si c'est standard ) :

    le parametrage dynamique du nombre de chiffre apres la virgule :

    double Valeur = 2.665221245456;
    int NbChiffreApresLaVirgule = 5;

    printf("%.*lf\n",NbChiffreApresLaVirgule, Valeur );
    il y a du linge sur la corde à linge

  8. #8
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 332
    Points : 130 092
    Points
    130 092
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Gandalf
    Citation Envoyé par Eusebius
    Anomaly, qu'est-ce que tu veux dire par n chiffres dont (n-1) significatifs ???
    en simplifié inutile d'en afficher plus...
    Non, cela veut dire que sur n chiffres, n - 1 sont exacts, le dernier peut être le résultat d'un arrondi.

    Exemple :
    2 / 3 = 0.6666667

    Le dernier chiffre (7) n'est pas la réelle 7ème décimal du nombre (c'est 6, et il y a encore beaucoup de 6 après )
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  9. #9
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Si c'est un arrondi il est significatif... enfin c'est ce qu'on m'a toujours appris...

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Points : 325
    Points
    325
    Par défaut
    Citation Envoyé par Anomaly
    Citation Envoyé par Gandalf
    Citation Envoyé par Eusebius
    Anomaly, qu'est-ce que tu veux dire par n chiffres dont (n-1) significatifs ???
    en simplifié inutile d'en afficher plus...
    Non, cela veut dire que sur n chiffres, n - 1 sont exacts, le dernier peut être le résultat d'un arrondi.

    Exemple :
    2 / 3 = 0.6666667

    Le dernier chiffre (7) n'est pas la réelle 7ème décimal du nombre (c'est 6, et il y a encore beaucoup de 6 après )
    c'est ce que j'explique par la suite...

    Eusebius > ici non, car c'est l'arrondi du au stockage...

    l'exemple que je donnais était 0.1.
    mais revenons à 2/3 donné par anomaly en base 3 il s'ecrit :
    0.2 ! il n'y a pas d'arrondi....
    imagine que tu me donnes 2/3 en base 3 (donc 0.2) puis que le stocke en base 10
    0.666667....
    puis que je te le rendent en base 3 sous une forme...
    0.2000001 !!! le 1 est-il significatif ?

  11. #11
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Gandalf : J'ai bien compris le problème du changement de base et ton premier message répondait à mes questions, merci beaucoup.
    C'est l'exemple d'Anomaly (hors bases) et la notion de chiffre significatif qu'il donnait qui me gênait un peu...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 04/06/2009, 23h44
  2. arrondir un nombre à 2 chiffres après la virgule
    Par El Saigneur dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/02/2005, 08h36
  3. Commande pour afficher des chiffres apres la virgule
    Par manar dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 23/09/2004, 18h28
  4. Chiffres après la virgule figés
    Par bondjames dans le forum Bases de données
    Réponses: 6
    Dernier message: 10/03/2004, 23h09
  5. [MFC] Nombre de chiffres après la virgule
    Par karl3i dans le forum MFC
    Réponses: 3
    Dernier message: 27/01/2004, 13h04

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