Pb stupide : diviser

cs_guifr Messages postés 105 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 19 mai 2005 - 26 févr. 2004 à 17:56
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 29 févr. 2004 à 10:49
Alors là, je sens que je vais craquer, je suis à deux doigts de commettre un ordicide ! :(
sois mon pc est complètement stupide, ou alors c'est moi (ce qui est d'ailleurs tout à fait possible :big) ) !
Ceci dit le code suivant, en apparence anodin, me pose problème, et le problème est d'autant plus grand que le code est anodin justement :
considérons le petit morceau de code :
#include 

using std::cout;
using std::cin;

int main()
{
 float fl;

 
 fl = 4 / 10;
 cout << "resultat " << fl << "\n";
 cin >> fl;
}


Quel sera la valeur retournée ? celle que l'on serait en droit d'attendre, c'est à dire 0.4 ? et bien non ! il me sort "0", et si je l'utilise pour calculer, c'est bien un calcul avec 0 qu'il effectue, le pb ne vient donc pas de l'affichage...
A titre d'information, le problème est le même avec une déclaration de fl en
double
ou
long double
.
J'ai compilé avec DJGPP, ceci dit, avec Dev-C++ (4) le pb est exactement le même...
Alors comme il me semble étonnant qu'un langage comme le C++ ne sache pas faire des divisions à virgule, j'imagine que le problème vient de moi... mais j'ai beau chercher, je suis même aller vérifier que "/" était bien l'opérateur pour les divisions... mais rien à faire ! j'ai aussi rajouté math.h (sans trop y croire d'ailleurs) ça n'a rien changé...
Alors ma foi, si quelqu'un a une explication...

7 réponses

BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 févr. 2004 à 18:02
Essaie:
fl = 4.0 / 10.0;

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_guifr Messages postés 105 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 19 mai 2005
26 févr. 2004 à 18:10
Que tu sois remercié de cette aide sur 7 générations ! :big)
J'aurais jamais cru que c'était un truc pareil, là alors ça m'épate ! ceci dit je comprends pas le trop le fond du pb, à savoir poourquoi ça marchais pas avant, enfin l'essentiel c'est que ça marche maintenant ! 8-)
Ceci dit, et tant qu'on est dans le problème des nombres réels, y a t-il un moyen d'obtenir plus que les, décevants, 6 chiffres significatifs ? à moins que ce ne soit qu'une convention d'affichage, et si oui, comment la passer outre ?

Merci encore !
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 févr. 2004 à 18:23
sers toi de sprintf sur un buffer et tu pourras specifier le nombre de decimales, affiche ensuite le buffer.
Ton prob precedent: logique puisqu'il affectait le resultat d'une div de 2 entiers, donne un entier. Faudra y penser pour la suite.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
26 févr. 2004 à 19:53
ou
cout << "resultat " <<setprecision(10)<< fl << "\n";
0

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

Posez votre question
cs_Funcky Messages postés 59 Date d'inscription lundi 31 décembre 2001 Statut Membre Dernière intervention 11 mai 2006
26 févr. 2004 à 21:55
pour le fond du problème, c'est assez simple, pour le compilateur tu divise en entier par un entier ... et qui dit opération sur les entiers, bein ca donne un entier ...

Dans le cas ou tu doit diviser deux variables entières pour donner un float, il faut faire un cast :

int i,j;
float h;

i = 4;
j = 10;

h = (float) i / (float) j;

dans le but de "lui faire croire" que tu fait une opération sur des float

=============================

Funcky 8-)

=============================

On dit que seulement dix personnes au monde comprenaient Einstein. Personne ne me comprend. Suis-je un génie ?
0
cs_guifr Messages postés 105 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 19 mai 2005
28 févr. 2004 à 21:22
Moui, certes, ceci dit, je ne pense pas que c'eut été très opportun de faire ainsi, si a priori tu demande à ce que cette valeur soit stocké dans une variable de type réel, c'est que justement tu t'attends à ce que le résulat soit réel...
Du reste, je ne connais pas d'autre langage qui raisonne ainsi (ceci dit je ne connais pas beaucoups de langages non plus, ceci expliquant peut-être cela...)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
29 févr. 2004 à 10:49
au contraire, c'est une chance de pouvoir specifier le type de l'operation
0
Rejoignez-nous