[C] Comment arrondir dans une expr. evaluée
RISC
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je cherche à arrondir toto dont le résultat est non entier :
#define toto (A/B/C)-1 // je souhaiterais avoir l'équivalent de round((A/B/C)-1)
Dans mon cas toto est est int
J'ai lu dans un forum qu'on peut arriver à faire cela de cette manière :
tata = toto + 0.5;
Comment puis-je caster toto pour que le calcul se fasse correctement ?
merci
Je cherche à arrondir toto dont le résultat est non entier :
#define toto (A/B/C)-1 // je souhaiterais avoir l'équivalent de round((A/B/C)-1)
Dans mon cas toto est est int
J'ai lu dans un forum qu'on peut arriver à faire cela de cette manière :
tata = toto + 0.5;
Comment puis-je caster toto pour que le calcul se fasse correctement ?
merci
A voir également:
- [C] Comment arrondir dans une expr. evaluée
- Js arrondir - Forum Javascript
- Javascript arrondir à 2 décimales - Forum Webmastering
- Excel arrondir au 0.5 supérieur ✓ - Forum Excel
- Arrondir à 2 décimales après la virgule - calculateur javascript ✓ - Forum Javascript
- Les données fournies dans le fichier à télécharger peuvent être synthétisées par le tableau récapitulatif ci-dessous. dans le fichier, générez ce tableau automatiquement (tableau croisé dynamique ou table de pilote) à partir des quatre premières colonnes. il manque 5 valeurs dans le tableau ci-dessous. retrouvez-les dans votre tableau, puis reportez-les arrondies à l’entier le plus proche. - Guide
7 réponses
Salut,
tata est un int
J'ai trouvé une macro sympa sur internet :
#define round(x) (int)((x)>0?(x)+0.5:(x)-0.5)
J'ai essayé cela :
#define toto (2/3) // plus tard toto sera une expression plus compliquée
tata = round(toto);
mais je n'arrive pas obtenir un résultat correct....
tata est un int
J'ai trouvé une macro sympa sur internet :
#define round(x) (int)((x)>0?(x)+0.5:(x)-0.5)
J'ai essayé cela :
#define toto (2/3) // plus tard toto sera une expression plus compliquée
tata = round(toto);
mais je n'arrive pas obtenir un résultat correct....
ce que tu veux :
si x-(int) x < 0.5 alors retourner (int)x
sinon retourner (int) x +1
#define round(x) ( x-(int)(x) <0.5 ) ? (int)(x): (int) (x) +1
si x-(int) x < 0.5 alors retourner (int)x
sinon retourner (int) x +1
#define round(x) ( x-(int)(x) <0.5 ) ? (int)(x): (int) (x) +1
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
J'ai finalement trouvé la source de mon problème. Je fournissais à la macro non pas une variable mais une expression.
Cette expression donnait déjà une valeur tronquée à cause des calculs internes d'évaluation.
J'ai résolu mon probème en castant en float la valeur passée à la macro et en forçant la macro à travailler sur des float :
#define TOTO 121
#define round(x) (int)(((float)(x))>0?(float)(x)+0.5:(float)(x)-0.5)
#define TATA round((TOTO/(float)15)-1)
....
A = TATA;
NB : si je ne caste pas (x) dans la macro round(x) j'ai une erreur dans mon compilateur basé sur GCC
Merci
J'ai finalement trouvé la source de mon problème. Je fournissais à la macro non pas une variable mais une expression.
Cette expression donnait déjà une valeur tronquée à cause des calculs internes d'évaluation.
J'ai résolu mon probème en castant en float la valeur passée à la macro et en forçant la macro à travailler sur des float :
#define TOTO 121
#define round(x) (int)(((float)(x))>0?(float)(x)+0.5:(float)(x)-0.5)
#define TATA round((TOTO/(float)15)-1)
....
A = TATA;
NB : si je ne caste pas (x) dans la macro round(x) j'ai une erreur dans mon compilateur basé sur GCC
Merci
Salut,
Pourquoi tu t'embêtes à faire une macro round, alors que la fonction fait déjà partie intégrante de la bibliothèque math.h ?
Sinon, il est conseillé d'éviter d'utiliser les macro, et d'y préférer les fonctions inline. Cela évite justement les prises de têtes comme tu vis ^^.
Cdlt
Pourquoi tu t'embêtes à faire une macro round, alors que la fonction fait déjà partie intégrante de la bibliothèque math.h ?
Sinon, il est conseillé d'éviter d'utiliser les macro, et d'y préférer les fonctions inline. Cela évite justement les prises de têtes comme tu vis ^^.
Cdlt