Quel .h inclure pour la fonction ROUND ? [C++ Builder] - C++ - Programmation
Marsh Posté le 19-07-2002 à 15:41:17
ca fait longtemps que g po programmer en c 
 
mais ca doit donner un truc du genre: 
 
long Round(float f) 
{ 
 if( (f- trunc(f)+0.5) > 1) 
  return trunc(f); 
 return trunc(f); 
   
} 
 
PS: je sais plus si ca existe f, sinon, il faut convertir f en entier tout simplement (il tronque automatiquement je crois...) 
PPS: je ne suis pas sur du tout que ca marche, mais c'est l'esprit... 
Marsh Posté le 19-07-2002 à 16:38:35
![[:f1key] [:f1key]](https://forum-images.hardware.fr/images/perso/f1key.gif) si la fonction existe, dans l'aide ils disent dans quelle unit c'est
 si la fonction existe, dans l'aide ils disent dans quelle unit c'est 
à priori c'est dans math.h (et round en minuscule bien sûr)
Marsh Posté le 19-07-2002 à 17:07:31
justement c pa marqué et c pas dans math.h ... 
en plus la fonction est en majuscule ... 
Marsh Posté le 19-07-2002 à 17:11:33
| farok a écrit a écrit  : ca fait longtemps que g po programmer en c mais ca doit donner un truc du genre: long Round(float f) { if( (f- trunc(f)+0.5) > 1) return trunc(f); return trunc(f); } PS: je sais plus si ca existe f, sinon, il faut convertir f en entier tout simplement (il tronque automatiquement je crois...) PPS: je ne suis pas sur du tout que ca marche, mais c'est l'esprit... | 
 
 
En fait c pa ça que je veux je veux arrondir au nombre de chiffre desiré apres la virgule comme le fait round ... g essayé de la programmer mais g du mal ...
Marsh Posté le 19-07-2002 à 17:40:06
ça y est g reussi , en fait il fallait que 2 lignes   
  
 
| Code : 
 | 
Marsh Posté le 19-07-2002 à 18:06:22
C'est quoi ce langage où y a même pas de fonction d'arrondi 
Marsh Posté le 19-07-2002 à 18:45:05
| seb90 a écrit a écrit  : ça y est g reussi , en fait il fallait que 2 lignes   
   | 
 
 
 
 
oulà t'as pas plus lent ? 
 
un ptit sqrt() ou un cos().....  
 
ça manque je trouve....
Marsh Posté le 19-07-2002 à 18:48:32
tu fais (pour un arrondi au plus près): 
 
float i,j; 
 
j=quelquechose(); 
 
i=(float)((int)((float)j+0.5f)); 
 
c'est très crade mais ça marche. 
 
Marsh Posté le 19-07-2002 à 20:41:48
| bjone a écrit a écrit  : oulà t'as pas plus lent ? un ptit sqrt() ou un cos().....   ça manque je trouve.... | 
 
 
Ben je vois pa ou c lent y a pas de boucles en plus ... tu c les ùmultiplications ça se fait rapidement de nos jours   
 
Marsh Posté le 19-07-2002 à 20:44:10
pow c'est plus lent que la solution de faire des casts 
Marsh Posté le 20-07-2002 à 12:06:53
| seb90 a écrit a écrit  : Ben je vois pa ou c lent y a pas de boucles en plus ... tu c les ùmultiplications ça se fait rapidement de nos jours   | 
 
 
pow c'est un logarithme et un exponentiel : ultra lent. 
Il y a 2 fonctions d'arrondi : 
* ceil() qui arrondi à l'entier superieur 
* floor() qui arrondi à l'entier inferieur 
 
Ca sert de lire la doc de temps en temps...   
   
   
  
 
tu fais un truc du style (int)floor(x+0.5)
Marsh Posté le 20-07-2002 à 13:49:45
par défaut le C/C++ impose un arrondi par défaut.... 
donc le floor() est théoriquement superflu.... 
 
(par contre lors des conversions float->int, le fpu est configurable en par défaut/excès/au plus près)
Marsh Posté le 19-07-2002 à 15:27:22
je trouve pa qQuel .h inclure pour la fonction ROUND sous builder 3 , si qnn pouvait m aider ça serait sympa !
Message édité par seb90 le 19-07-2002 à 15:28:07