problemes de divisions = résultats erronés.

problemes de divisions = résultats erronés. - C - Programmation

Marsh Posté le 07-03-2004 à 00:42:40    

Bonjour a tous.
J'ai aujourdhui un probleme avec des divisions.
 
en effet, le programme suivant :

Code :
  1. #include <stdio.h>
  2. main()
  3. {
  4. float r=10/3;
  5. printf("%f",r);
  6. }


m'affiche "3.00000".
Or 10/3=3.3333333...
 
je compile mon programme avec gcc 3.3.1 via la commande
gcc -o nom_prog nom_source.c et je l'execute tout aussi classiquement via ./nom_prog
 
j'ai du mal a saisir ou est le progleme, et pourquoi je n'arrive
pas a obtenir autre chose que des troncatures dans mes résultats...


---------------
http://www.core-tx.com
Reply

Marsh Posté le 07-03-2004 à 00:42:40   

Reply

Marsh Posté le 07-03-2004 à 00:45:12    

10 est un entier
3 est entier
 
10 / 3 est donc la division entière
 
10/3 == 3
 
 
10.0 / 3.0 ... raisonnement similaire -> division flottante
10.0 / 3.0 == 3.333333...

Reply

Marsh Posté le 07-03-2004 à 02:35:00    

c'est assez genant dans ce cas :/
enfin c'est une habitude a prendre que de rajouter des zeros derriere...
 
mais quand je dois diviser un entier a par un entier b, je fais comment? je vois mal comment integrer de casting dans une division?!
(j'ai meme eu une erreur a la compil en faisant c=(float *)a/b;
 
en tous cas merci de la précision


---------------
http://www.core-tx.com
Reply

Marsh Posté le 07-03-2004 à 02:41:37    

c = (float)a/(float)b

Reply

Marsh Posté le 07-03-2004 à 13:35:40    

sky99 a écrit :

c'est assez genant dans ce cas :/
enfin c'est une habitude a prendre que de rajouter des zeros derriere...

ben non, c'est mathématiques et c'est sémantiquement correct

Reply

Marsh Posté le 07-03-2004 à 13:41:29    

Taz a écrit :

ben non, c'est mathématiques et c'est sémantiquement correct


c surtout pour des raisons de performance, si tu nindique rien il te fait une division entiere (plus rapide) commme ca il n'y a que les cas ou yen a vraiment besoin que c'est appliqué
 
 


Message édité par red faction le 07-03-2004 à 13:42:07
Reply

Marsh Posté le 07-03-2004 à 13:47:49    

je crois vraiment pas que la performance entre en ligne de compte

Reply

Marsh Posté le 08-03-2004 à 23:29:31    

si les .0 te fatiguent tu peux te contenter du point. tu peux même te contenter de mettre un point à un des deux termes. mais bon si tu veux un code lisible tu évites ce genre de blague ;)

Reply

Marsh Posté le 15-03-2004 à 02:16:53    

a vrai dire, c'est pas que ça me fatigue dans l'absolu, c'est juste qu'il a fallu rechanger tout le code précédent :)
m'enfin bon...
sinon, taz, je ne vois pas en quoi c'est mathematique...
en mathematiques 10/3 =10/3 et non3 :|
dans tous les cas, merci a tous :)


---------------
http://www.core-tx.com
Reply

Marsh Posté le 15-03-2004 à 02:26:23    

sky99 a écrit :

a vrai dire, c'est pas que ça me fatigue dans l'absolu, c'est juste qu'il a fallu rechanger tout le code précédent :)
m'enfin bon...
sinon, taz, je ne vois pas en quoi c'est mathematique...
en mathematiques 10/3 =10/3 et non3
:|
dans tous les cas, merci a tous :)
 

Dans les entiers rationnels oui, dans les entiers naturels, non.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed