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 :

[Console] Comment afficher de gros nombres à virgule ?


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 155
    Points : 90
    Points
    90
    Par défaut [Console] Comment afficher de gros nombres à virgule ?
    Bonjour,

    J'ai créer une petite fonction qui calcul la valeur de e^{x} en utlisant la célèbre série :

    e^{x} = 1 + x/1! + x²/2! + x³/3! ...

    Je demande donc à l'utilisateur d'entrer un nombre ainsi que la précision qu'il souhaite, j'appel la fonction calculerExp qui calcul la valeur approchée et ensuite j'affiche ça sur la console.

    Voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
       double nombre,resultat; int precision;
     
        cout << "\nEntrez le nombre dont vous voulez calculez l'exponentielle en base e : ";
        cin >> nombre;
        cout << "\nEntrez maintenant la precision desiree : "; 
        cin >> precision;
     
        resultat = calculerExp(nombre,precision);
     
        cout << "\ne exposant " << nombre << " egale " << resultat << endl;
    La fonction calculerExp fonctionne bien je pense (point du vue fonctionnel je veux dire) mais j'ai un petit soucis lorsqu'il s'agit d'afficher le résultat.

    Lorsque je tente d'affiche une variable double avec cout ainsi par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    double x = 5,89984234384248
    cout >> double
    Eh bien cout n'affiche que les 4 ou 5 premières décimales de mon nombre. Ca n'a l'air de rien comme cela mais l'ennui c'est qu'en plus de ça la réponse est arrondie.

    Donc si j'ai : x = 5,456559 il m'affichera 5,45656 ce qui fait que comme j'ai une série avec pafois beaucoup de termes il y a une erreur de plus en plus grande ...

    A titre d'exemple pour e^{5} = 148,413159 ... si je lui demande de la calculer avec 14 termes il me donne 153, ...
    Au début je pensais que ma fonction était erronée mais je me suis aperçu que non en la testant, il s'agit dont bien d'une erreur de gestion des nombres à virgule ...

    Pouvez vous me dire comment résoudre mon problème (= comment géré efficacement de grands nombres à virgules ...) ?

    merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 116
    Points : 68
    Points
    68
    Par défaut
    d'ici :

    http://www.cplusplus.com/ref/

    tu as une fonction cout.precision(combienaprèslavirgule); pour preciser le nombre de décimales affichées.
    C'est cool, ça colle ?

    en revanche je comprends pas ton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double x = 5,89984234384248 
    cout >> double
    Ce serait pas plutot cout << x ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 155
    Points : 90
    Points
    90
    Par défaut
    Ahhhhhh merci je vais aller voir

    Citation Envoyé par TheRedLed
    Ce serait pas plutot cout << x ?
    Si si, je confond parfois un peu les opérateurs << et >>

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 155
    Points : 90
    Points
    90
    Par défaut
    C'est super ! Le programme fournit toujours des rsultats erronés mais ça va déja mieux qu'avant ...

    Ce qui est chouette c'est que si le nombre ne contient que 5 décimales et que j'ai précisé cou.precision(10) il ne va pas me rajouter 5 zéros derrières les 5 décimales (je m'y attendait pourtant) ...

    Cette astuce devrait se trouver dans la Faq C++ je trouve (non ?) ...

    merci !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 116
    Points : 68
    Points
    68
    Par défaut
    toi bienvenu

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 116
    Points : 68
    Points
    68
    Par défaut
    [Résolu] non ?

    Quelqu'un pour la FAQ ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 155
    Points : 90
    Points
    90
    Par défaut
    Résolut oui.

    On est sensé mettre ça nous même dans la FAQ ? Moi je veux bien mais j'ai pas la moindre idée de comment faire ...

  8. #8
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut

    Pas vraiment fréquent comme question.
    Pas comparable avec les troupeaux (*) de pause, de split, de lectures de lignes, ...
    Pas vraiment essentiel non plus.

    A la limite : Q: "Comment on formatte un nombre ?" A: "man <iomanip>"

    (*) Il est un phénomène étrange qui veut qu'une même question revienne toujours ... en troupeaux d'elle même sur une "courte" prériode de temps, si j'ose dire.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 155
    Points : 90
    Points
    90
    Par défaut
    Bah, pour de petit programmes scientifiques sur la console je trouve ça essentiel ...

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Un petit topo sur les manipulateurs de flux est plus ou moins prévu pour une prochaine version de la FAQ.

    Sinon pour ce genre de (demande de) contribution à la FAQ, il y a un post-it dans lequel vous pouvez poster, juste ici.

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

Discussions similaires

  1. Comment afficher un nombre à virgule ?
    Par DR0GV3 dans le forum x86 16-bits
    Réponses: 9
    Dernier message: 10/07/2011, 19h50
  2. Réponses: 8
    Dernier message: 18/04/2011, 14h46
  3. Réponses: 10
    Dernier message: 07/04/2009, 13h17
  4. Réponses: 8
    Dernier message: 06/04/2006, 09h01
  5. Réponses: 5
    Dernier message: 21/03/2006, 11h43

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