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 :

type "short" erreur de calcul, pourquoi ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Par défaut type "short" erreur de calcul, pourquoi ?
    Bonsoir,
    Je commence à programmer en C (sous linux avec le compilateur gcc 4.0), il nous est demandé de faire un programme pour résoudre une équation du 2nd degré, jusque là ok, mais si j'utilise le type short à la place de int les calculs sont faux, quelqu'un peut-il me dire pourquoi?

    Merci, voici le code
    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>
    #include <math.h>
     
    main ()
    {
      int a, b, c, delta; //ne fonctionne pas avec short
      printf("\nEntrez les 3 coefficients de l'equation du 2nd degre", a, b, c\n");
      scanf("%d %d %d",&a,&b,&c);
      if (a != 0)
      {
        printf("\nvaleur de delta = %d\n",delta = pow(b,2) - (4*a*c));
        if (delta > 0)
          printf("\nla racine 1 = %.2f et la racine 2 = %.2f\n",((-b + sqrt(delta)) / (2 * a)), ((-b -(sqrt(delta))) / (2 * a)));
    /* la fct sqrt() renvoie un double, donc pas besoin de changement de type)*/
        else if (delta == 0)
          printf("\nla racine = %.2f\n",-(float)b/(2 * a));
            else printf("\npas de racine reelle\n");
      }
    else printf("\n pas une equation du 2nd degre");
    }

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Jao,

    Cela doit dépendre des valeurs des valeurs que tu donnes pour les coefficients.

    Pour de petites valeurs, ça devrait être bon, tant qu'aucun calcul intermédiaire ne dépasse la capacité du type short pour ton compilateur.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 131
    Par défaut
    la plage d'un short signe est -32 768 à 32 767. Depasses-tu cette plage ?

    PS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("\nEntrez les 3 coefficients de l'equation du 2nd degre", a, b, c\n");
    il y a un " en trop

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Par défaut
    - Pour les valeurs, j'ai testé le minimum, 1, 1, 1 -> x²+x+1, résultat: pas une équation du 2nd degré.
    ou pour 1, -5, 6, le programme me donne comme résultat : delta = 24 et racine1 = -2,45 et racine2 = 2,45 !! (au lieu de delta = 1, racine1 = 2 et racine2 = 3) , voilà pourquoi je ne comprend pas...^^
    -Pour le " c'est une erreur de copier/coller où l'accent du é a été remplacé par " je les avais remplacé, j'ai pas vu celui-là (je passe d'un OS français à un anglais).

    Merci pour les réponses.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Par défaut
    re,
    , je viens de trouver mon erreur, (en utilisant la directive de compilation -Wall), les formats du scanf ne sont pas corrects %d --> %hd (pour les entiers codés sur 2 octets).

    Merci à berg et droggo

    A+

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

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