Langage C

Fermé
nmrani - 16 mai 2008 à 16:33
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 16 mai 2008 à 20:36
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();
}
A voir également:

3 réponses

mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
16 mai 2008 à 16:38
parce que tu fais une division entiere...
essaye ça
I=(float) ((2*2*2)-(1*1*1))/ (float) 3; 
0
nmrani Messages postés 8 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 18 janvier 2012
16 mai 2008 à 17:02
bonjour,
en effet.
merci.
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
16 mai 2008 à 17:09
de rien...
n'oublie pas de metre en resolu ;)
0
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
16 mai 2008 à 20:36
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