Langage C

nmrani -  
Mahmah Messages postés 497 Statut Membre -
Bonjour,

svp si qlq un puisse me dire pourquoi ce petit code donne: I=2.00000 au lieu de I=2.33333

#include<stdio.h>
#include<conio.h>
main()
{
float I;
I=((2*2*2)-(1*1*1))/3;
printf("I= %f",I);
getch();
}
Configuration: Windows XP
Internet Explorer 6.0

3 réponses

  1. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    parce que tu fais une division entiere...
    essaye ça
    I=(float) ((2*2*2)-(1*1*1))/ (float) 3; 
    
    0
    1. nmrani Messages postés 10 Statut Membre
       
      bonjour,
      en effet.
      merci.
      0
  2. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    de rien...
    n'oublie pas de metre en resolu ;)
    0
  3. Mahmah Messages postés 497 Statut Membre 125
     
    Bonjour,

    Je me permets de compléter un peu...

    En C, 2 et 3 sont des entiers. Les opérations sur des entiers donnent un résultat entier. Ainsi 2 / 3 = 0.
    0 / 4 = 0
    1 / 4 = 0
    ...
    3 / 4 = 0
    4 / 4 = 1
    ...
    7 / 4 = 1
    8 / 4 = 2
    et ainsi de suite.

    Pour que le compilateur comprenne bien que 2 est un nombre flottant, il faut lui écrire 2.0f
    (On voit parfois 2.f )

    ainsi ton opération s'écrit :

    I=((2.0f*2.0f*2.0f)-(1.0f*1.0f*1.0f))/3.0f;

    Et là tout est clair pour le compilateur.

    Ils existent aussi les nombres flottants à double précision (les double) qui eux s'écrivent 1.0, 2.0 et évidemment 2.468476 si on veut.
    (on voit parfois 2. )

    Voilou, ^^

    M.
    0