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 :

double ,float qui sert à quoi ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 165
    Par défaut double ,float qui sert à quoi ?
    bonjour tout le monde

    toujours cet épineux problème double et float servent normalement (je ne sais plus ce qui est normale en C) à représenter des chiffre décimaux c.à.d avec virgule .

    En représentant sur ce code les décimaux par un double j'obtiens un zéro alors que sur un autre code
    en mettant un float j'obtiens un nombre avec virgule certes mais seulement approximatif
    voici les deux codes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <stdio.h>
     
    main()
     
    {
     
    float prix , tva , totalTva ;  /*il faut chercher la différence car en mettant float j'ai un bon résultat en mettant double j'obtient tout simplement une connerie */
     
    prix       = 0.0 ;    //initialisation des variables
    tva        = 0.2 ;
     
    printf("entrez le prix à calculer : \n");
    scanf("%f",&prix);
     
    totalTva  = prix * tva ; 
     
    printf("le ttc est de : %1.2f\n",totalTva);
     
    //return 0;
     
    }
    voici le second :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
    #include <stdlib.h>
     
    main()
     {
    double soldeBanque = 6500000000.0 ;
    //printf("vous avez %f dirhams en banque\n", soldeBanque);
     
    printf("vous aviez %.2f dirhams en banque\n", soldeBanque);
    printf("vous avez maintenant %.2f dirhams en banque\n", 0.0);
     
    return 0; 
     }
    j'avoue que c'est mauvais si on ne sait pas à l'avance ce que produit tel ou tel format.
    pouvez s.v.p m'explique où et quand et pourquoi dois je utiliser tel ou tel terme
    merci d'avance
    j'y crois encore

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    Pourrais tu expliquer mieux ton probleme car là c'est pas clair?
    Sinon, les constantes flottantes sont des doubles (quand on ecrit "0.2", c'est un double) et il est preferable d'utiliser des doubles à la place de floats quand on veut manipuler des flottants

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 165
    Par défaut
    bien sûr ,sur le premier code en remplaçant float par double le programme donnne un zéro,exmple si le 45 la tva normalement est de 9.

    alors que double et float servent tout deux pour des réels voilà ce que je ne comprend pas ???

  4. #4
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Ok, je pense que c'est le specificateur de format de ton scanf qui est pas bon. En effet il essayerait de stoquer un float dans un double et ça donnerait n'importe quoi vu que la representation n'est pas la même.
    Le specificateur de format pour un double est %lf.
    http://man.developpez.com/man3/scanf.3.php

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par abdelilah Voir le message
    bien sûr ,sur le premier code en remplaçant float par double le programme donnne un zéro,exmple si le 45 la tva normalement est de 9.
    Si tu fais une saisie avec un double il faut utiliser "%lf" et non "%f". Tu n'ouvres jamais ton livre de C ?

    alors que double et float servent tout deux pour des réels voilà ce que je ne comprend pas ???
    On te l'a déjà expliqué. Les double sont le type de base qui servent à tout. Les float sont un type réduit (donc moins précis) qui servent quand on ne peut pas faire autrement (problème de stockage, de taille mémoire etc.)

    Tu ne comprends pas ce qu'on te dit ? A la longue, c'est fatiguant de répéter tout le temps la même chose...

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 165
    Par défaut
    bonjour

    vous avez raison Emmanuel Delahaye à force de répéter cela devient agaçant,j'ai relus les postes ainsi que votre tutoriel,alors le problème précis qui me vient à l'esprit est le suivant.

    supposez que vous souhaitez créer une application de calcul où l'utilisateur aura à saisir des valeurs à sa guise dans une variante prix qui peut aller du simple zéro jusqu'au valeur qui provoqueront le débordement d'un float comment pourrais t on faire pour garder des résultats non pas approximatifs .

    Comment éviter cette contrainte car en utilisant float pour la variable prix ça marche pour les petites quantités,mais en pour les grandes valeurs c'est une autre histoire, en utilisant double nous aurons des valeurs absurdes en calculant
    de petites valeur s.

    quelqu'un pourrait il m'éclaircir car j'avais l'habitude d'utiliser pascal qui ne connait pas ce genre de contraintes.

    merci d'avance.

  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 abdelilah Voir le message
    Comment éviter cette contrainte car en utilisant float pour la variable prix
    Quelle partie de "on n'utilise pas les flottants, que ce soit les double ou les float, pour de l'argent" tu ne comprends pas?

    ça marche pour les petites quantités,mais en pour les grandes valeurs c'est une autre histoire, en utilisant double nous aurons des valeurs absurdes en calculant
    de petites valeur s.
    Mais non. Dans les deux cas tu vas obtenir des valeurs que tu considéreras absurdes. Ce ne sont pas les mêmes, c'est tout.

    quelqu'un pourrait il m'éclaircir car j'avais l'habitude d'utiliser pascal qui ne connait pas ce genre de contraintes.
    Les problèmes avec les flottants sont les mêmes partout.

  8. #8
    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 abdelilah Voir le message
    toujours cet épineux problème double et float servent normalement (je ne sais plus ce qui est normale en C)
    double. float ne devrait servir que quand il y a de bonnes raisons de ne pas utiliser double -- la plus courante étant pour le stockage.

    à représenter des chiffre décimaux c.à.d avec virgule .
    Si tous les flottants sont des décimaux, représenter les décimaux n'est pas leur objectif et donc pas mal de décimaux simples comme 0.1 ne sont pas représentables.

    Les flottants sont des entiers multipliés par une puissance (éventuellement négative) de 2. Quand on veut stocker dans un flottant un nombre qui n'a pas de représentation, un arrondi permet de choisir un nombre représentable proche. Par exemple 0.1 peut être représenté par 1677722/2^24 (2^24=16777216). Suivant le format d'affichage, cette différence peut être visible où pas.

    J'oubliais: on n'utilise normalement pas les flottants (double ou float) pour socker des sommes. Les règles comptables sont assez strictes et tenir compte des particularités des flottants pour les implémenter est possible mais souvent pas la meilleure solution. Ce qu'on fait est utiliser des sommes entières (long suffit rarement d'ailleurs) d'une unité sous-multiple de l'unité principale (utiliser les centimes par exemple) en manipulant l'affichage pour qu'il montre ce qu'on veut.

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par abdelilah Voir le message
    toujours cet épineux problème double et float servent normalement (je ne sais plus ce qui est normale en C) à représenter des chiffre décimaux c.à.d avec virgule .
    Tu as déjà eu beaucoup de réponses ici :

    http://www.developpez.net/forums/sho...d.php?t=436574

    Alors relit tout ça, et si il y a un point douteux, pose une question précise.

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

Discussions similaires

  1. Qui sert à quoi ?
    Par abdelilah dans le forum Débuter
    Réponses: 6
    Dernier message: 01/11/2007, 12h01
  2. Suppression de cadre autour d'une image qui sert de lien
    Par vasilov dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 03/04/2005, 13h02
  3. Ça sert à quoi ?
    Par sokadavia dans le forum Scheme
    Réponses: 4
    Dernier message: 18/05/2004, 11h12

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