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 :

types de données pour des calculs mathématiques


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 35
    Points : 32
    Points
    32
    Par défaut types de données pour des calculs mathématiques
    Bonjour !
    mon code qui m pose problème est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Float X;
    Float Y;
    Y=120.5*X*X-1337.0*X+3748.4;
    fprintf(LOG," Y1=%f \n",Y);
    fprintf(LOG," Y2=%f \n",120.5*X*X-1337.0*X+3748.4);
    j ai deux résultats differents pour un même X
    exemple X=5.4
    => Y1=106.109173
    Y2=42.073647
    Quel type de données devrais je choisir pour avoir un résultat similaire à ce qui est calculé dans le "fprintf",sachant que c est le bon résultat?
    MERCI

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    d'abord c'est float avec un f minuscule et non pas Float avec un F majuscule ...

    Le C est sensible à la casse (majuscule/mnuscule)
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 35
    Points : 32
    Points
    32
    Par défaut
    jai réecris mes lignes de code sur le forum , j l es ai po copier coller!
    merci pour l'aide que tu m apporte!

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par hamska2 Voir le message
    jai réecris mes lignes de code sur le forum , j l es ai po copier coller!
    merci pour l'aide que tu m apporte!
    1. Primo,

    2. Secondo, bonjour la politesse !!

    3. Tertio, on n'est pas sensés le savoir, tu postes ça..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Le code posté ne compile pas.
    Si on le remet d'équerre, on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
     
    int main(void)
    {
        float X = 5.4;
        float Y;
     
        Y=120.5*X*X-1337.0*X+3748.4;
     
        fprintf(stdout," Y1=%f \n",Y);
        fprintf(stdout," Y2=%f \n",120.5*X*X-1337.0*X+3748.4);
     
        return 0;
    }
    Quand on l'exécute, on obtient deux fois la même chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >./a.exe
     Y1=42.379997
     Y2=42.379997
    Dans la mesure où le père noël nous a encore refusé une boule de cristal cette année, merci de poster un code qui compile et qui reproduit le bug.

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Hai,
    Citation Envoyé par hamska2 Voir le message
    jai réecris mes lignes de code sur le forum , j l es ai po copier coller!
    merci pour l'aide que tu m apporte!
    Un effort sur le français serait agréable pour les lecteurs.

    Pourquoi ne pas faire un copier/coller ?

    Tu trouves plus simple de retaper ton code ?
    Si les cons volaient, il ferait nuit à midi.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par hamska2 Voir le message
    Bonjour !
    mon code qui m pose problème est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Float X;
    Float Y;
    Y=120.5*X*X-1337.0*X+3748.4;
    fprintf(LOG," Y1=%f \n",Y);
    fprintf(LOG," Y2=%f \n",120.5*X*X-1337.0*X+3748.4);
    j ai deux résultats differents pour un même X
    exemple X=5.4
    => Y1=106.109173
    Y2=42.073647
    Quel type de données devrais je choisir pour avoir un résultat similaire à ce qui est calculé dans le "fprintf",sachant que c est le bon résultat?
    MERCI
    Ceci
    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>
    #define LOG stdout
    int main (void)
    {
       float X = 5.4;
       float Y;
       Y = 120.5 * X * X - 1337.0 * X + 3748.4;
       fprintf (LOG, " Y1=%f \n", Y);
       fprintf (LOG, " Y2=%f \n", 120.5 * X * X - 1337.0 * X + 3748.4);
     
       return 0;
    }
    donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     Y1=42.379997
     Y2=42.379997
     
    Process returned 0 (0x0)   execution time : 0.036 s
    Press any key to continue.
    la différence n'est pas flagrante. maisavec X = 10;, on obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     Y1=2428.399902
     Y2=2428.400000
     
    Process returned 0 (0x0)   execution time : 0.055 s
    Press any key to continue.
    probablement du aux pertes dans les conversions double/float. Je recommande le type double :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     Y1=2428.400000
     Y2=2428.400000
     
    Process returned 0 (0x0)   execution time : 0.036 s
    Press any key to continue.
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. Entrepôt de données pour des enseignants
    Par la joziane dans le forum Schéma
    Réponses: 14
    Dernier message: 03/01/2007, 16h55
  2. Meilleur type de données pour un prix
    Par linar009 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 17/08/2006, 14h41
  3. [HashMap] Ecrasement de données pour des clés différentes
    Par Adjanakis dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 20/07/2006, 11h20
  4. Type de données pour effectuer une différence en vba
    Par snoopy69 dans le forum Access
    Réponses: 4
    Dernier message: 03/03/2006, 07h49
  5. Réponses: 2
    Dernier message: 22/09/2003, 11h23

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