Problème avec les nombres flottants

Résolu/Fermé
maniqk - Modifié par maniqk le 25/06/2013 à 10:01
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 25 juin 2013 à 22:22
Bonjour,

J'ai un petit problème avec les nombres flottants, je n'arrive pas à comprendre pourquoi le code suivant ne me fournit pas ce que je veux :

int main(void){
   int a = 10;
   int b = 3;
   float c = a/b;

   printf("c = %f",c);

   return 0;


Dans la console j'obtiens "c = 3.00000".
Pourquoi n'ai-je pas c = 3.33333 ?

Merci d'avance

5 réponses

isrforlife Messages postés 129 Date d'inscription jeudi 6 juin 2013 Statut Membre Dernière intervention 19 juillet 2013 10
25 juin 2013 à 10:04
Utilise des floats à la place des int
0
J'ai reçu ton post mais je ne le vois pas, tu l'as peut être supprimé, en tout cas merci de ta réponse rapide.

Cependant, là j'ai simplifié mon programme..
En fait je définis mes "int" ci-dessus dans des directives #define en début de fichier, donc je ne déclare pas le type de mes variables...
0
Ok je vais parler tout seul mais du coup j'ai trouvé... Je laisse la question pour ceux qui se poseraient des questions !

-> Il suffisait d'écrire #define a 10.000000 au lieu de #define a 10 ...
0
isrforlife Messages postés 129 Date d'inscription jeudi 6 juin 2013 Statut Membre Dernière intervention 19 juillet 2013 10
25 juin 2013 à 10:33
Bravo ! :)

Mets en résolue !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 25/06/2013 à 22:29
Bonjour,

Un peu de précision pour comprendre.
int a = 10;
int b = 3;
float c = a/b;

Il s'agit d'une division d'entiers (a et b sont des int). En C, une division d'entier retourne la valeur entière. Donc 3. Peu importe que c soit de type float.

Plusieurs solutions. Par exemple :
1/ Utiliser au moins un float : float a=10; int b=3; float c=a/b;
2/ Convertir en float : int a=10; int b=3; float c=(a+.0f)/b; ainsi a est converti en float (somme d'un float et d'un int).
3/ Cast : int a=10; int b=3; float c=(float)a/b;

Sinon, je te conseille de plutôt utiliser des doubles.
int a=10; int b=3; double c=(double) a/b;
printf("c=%f\n",c);

Google is your friend
0