[C] - Problème avec la multiplication
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

[C] - Problème avec la multiplication



  1. #1
    jorg1n

    [C] - Problème avec la multiplication


    ------

    Bonjour,

    je rencontre un petit problème, je souhaite faire une multiplication et le résultat est incohérent!! voila ce que je fais:
    Code:
    unsigned long CapaRemainBat1;
    float CBatt1_Ah;
    short int CBatt1=40;
    ...
    CBatt1_Ah = CBatt1;
    CapaRemainBat1 = CBatt1*1000000;
    ...
    J'ai visualisé les étapes en mode pas à pas, et voila les résultat:
    CBatt1 = 40 -> ça c'est bon (normal)
    CBatt1_Ah = 40.0000 -> ça c'est bon
    CapaRemainBat1 = 6445568 -> pourquoi???

    Je ne comprend pas trop, je multiplie un "int" par un entier, et je le stock dans un unsigned long, ça devrait pourtant marcher non?

    Merci d'avance

    -----

  2. #2
    ElMamat

    Re : [C] - Problème avec la multiplication

    Salut,
    essaye ca :
    CapaRemainBat1 = (unsigned long)(CBatt1*1000000);
    normalement tu dois obtenir 40000000 soit 0x2625A00
    et toi tu obtiens 6445568 soit 0x625A00 c est pour ca qu il faut p-e forcer le type.

  3. #3
    jorg1n

    Re : [C] - Problème avec la multiplication

    Merci, mais toujours pareil!!
    en fait voila le contexte:
    Code:
      if(CapaRemainBat1 >= (CBatt1 * 1000000))
          {
              CBatt1_Ah = CBatt1;
              CapaRemainBat1 = (unsigned long)(CBatt1*1000000);
          }
    Par contre lorsque je fais :
    Code:
      if(CapaRemainBat1 >= (CBatt1 * 1000000))
          {
              CBatt1_Ah = CBatt1;
              CapaRemainBat1 = (unsigned long)CBatt1*1000000;
          }
    ça marche , par contre le problème, c'est que je rentre toujours dans ma condition même si CapaRemainBat1 est inférieur a (CBatt1 * 1000000), à croire que le calcul pour le test se fait mal!!
    Faut il forcer aussi lors du calcul dans la condition??
    Merci encore

  4. #4
    ElMamat

    Re : [C] - Problème avec la multiplication

    remplace
    CapaRemainBat1 = (unsigned long)(CBatt1*1000000);
    par
    CapaRemainBat1 = CBatt1*(unsigned long)(1000000);
    et tout rentre dans l'ordre
    (edit)
    J'etais en train d éditer, la solution que je donnais n etait pas correct par contre celle la oui, désolé ...
    (re)
    Oui il faut que tu forces tous les 1000000 par (unsigned long)(1000000)

  5. A voir en vidéo sur Futura
  6. #5
    jorg1n

    Re : [C] - Problème avec la multiplication

    Nikel ça marche...

    donc si je comprend bien, en général, dès que l'on effectue un calcul, un test entre une variable, et une valeur, il est préférable de forcé la valeur au type de la variable de résultat?
    ex:
    au lieu d'écrire :
    Code:
    if(CapaRemainBat1 > 2073741824)
    il vaut mieux écrire
    Code:
    if(CapaRemainBat1 > (unsigned long)(2073741824))
    Merci de me confirmer et surtout merci pour le coup de pouce

Discussions similaires

  1. [Biologie végétale] multiplication
    Par inviteea98018d dans le forum Biologie
    Réponses: 2
    Dernier message: 23/02/2009, 12h16
  2. Problème en trigo (multiplication, division d'un ou plusieurs arcs)
    Par invite702ec9ab dans le forum Mathématiques du collège et du lycée
    Réponses: 6
    Dernier message: 06/06/2008, 20h53
  3. comment realiser la multiplication en assembleur avec un pic 16F877?
    Par invite54d71191 dans le forum Électronique
    Réponses: 10
    Dernier message: 14/05/2008, 08h45
  4. multiplication avec un 18f4620
    Par invitebefa1d1f dans le forum Électronique
    Réponses: 2
    Dernier message: 15/04/2006, 22h16
  5. Multiplication
    Par Lévesque dans le forum Mathématiques du supérieur
    Réponses: 12
    Dernier message: 20/10/2005, 09h09
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...