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. Publicité
  3. #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.

  4. #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

  5. #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)

  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

  7. A voir en vidéo sur Futura

Sur le même thème :

Discussions similaires

  1. [Biologie végétale] multiplication
    Par youyette 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 DiiSSii dans le forum Mathématiques du collège et du lycée
    Réponses: 6
    Dernier message: 06/06/2008, 20h53
  3. Réponses: 10
    Dernier message: 14/05/2008, 08h45
  4. multiplication avec un 18f4620
    Par nico_ 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