Actualité informatique
Test comparatif matériel informatique
Jeux vidéo
Astuces informatique
Vidéo
Télécharger
Services en ligne
Forum informatique
01Business



|||-  

fonction round sur c++

 

jolaforet
Ajouter une réponse
 

 
Page photos
 
     
Vider la liste des messages à citer
 
 Page :
1
Auteur
 Sujet :

fonction round sur c++

Prévenir les modérateurs en cas d'abus 
namikaze
namikaze
  1. Posté le 10/04/2012 à 18:46:17  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
bonjour à tous,
 je vous écris car j'ai un problème, dans mon projet de bac je dois concevoir le programme d’un robot en "C++"
 et il me faudrait (pour finir mon projet)une fonction permettant aux nombres décimaux de passer en nombres entiers.
 j'ai essayer cette fonction déjà:
 float p10=Math.pow(10, n);
 float r=((int)(f*p10))/p10;
 (http://www.codyx.org/snippet_​arrondir-nombre-decimal_310.as​px)
 mais malheureusement cette fonction n'est pas reconnus dans la bibliothèque du robot du coup je n'ai pas pus compiler le programme...
 si vous avez des solutions je suis preneur.
 merci à vous.

paraboloide-hyperbolique
Sur la bonne voie (de 100 à 499 messages postés)
  1. Posté le 11/04/2012 à 10:38:34  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Bonjour,

 Passer par des puissances n'est pas une bonne idée: il y a un sérieux risque de perte de signification numérique.

 Voici un code plus stable:

 #include <math.h>

 int round(float a)
 {
 return (int)(ceil(a-0.5) == ceil(a) ? ceil(a) : floor(a));
 }

 "ceil" arrondi les nombres vers le haut et "floor" vers le bas.

 L'opérateur trinaire expression1 ? expression2 : expression3

 Renvoie expression2 si expression1 est vraie et expression3 sinon.

 Par exemple avec ce code, si a = 4.3:

 ceil(a-0.5) = ceil(3.8) = 4
 ceil(a) = ceil(4.3) = 5
 et on renvoie floor(a) = floor(4.3) = 4

 Si a = 4.8

 ceil(a-0.5) = ceil(4.3) = 5
 ceil(a) = ceil(4.8) = 5
 et on renvoie ceil(a) = ceil(4.8) = 5

(Publicité)
paraboloide-hyperbolique
Sur la bonne voie (de 100 à 499 messages postés)
  1. Posté le 11/04/2012 à 10:46:32  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Bonjour,

 Passer par des puissances n'est pas une bonne idée: il y a un sérieux risque de perte de signification numérique.

 Voici un code plus stable:

 #include <math.h>

 int round(float a)
 {
 return (int)(ceil(a-0.5) == ceil(a) ? ceil(a) : floor(a));
 }

 "ceil" arrondi les nombres vers le haut et "floor" vers le bas.

 L'opérateur trinaire expression1 ? expression2 : expression3

 Renvoie expression2 si expression1 est vraie et expression3 sinon.

 Par exemple avec ce code, si a = 4.3:

 ceil(a-0.5) = ceil(3.8) = 4
 ceil(a) = ceil(4.3) = 5
 et on renvoie floor(a) = floor(4.3) = 4

 Si a = 4.8

 ceil(a-0.5) = ceil(4.3) = 5
 ceil(a) = ceil(4.8) = 5
 et on renvoie ceil(a) = ceil(4.8) = 5

namikaze
  1. Posté le 11/04/2012 à 12:02:26  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Le gros problème c'est que je ne dispose pas de la bibliothèque math.h dans mon projet.
 donc je ne pense pas que cette solution fonctionnerait ...

paraboloide-hyperbolique
Sur la bonne voie (de 100 à 499 messages postés)
  1. Posté le 11/04/2012 à 12:50:53  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Ce n'est pas un problème, on peut très bien "émuler" les fonctions "ceil" et "floor" avec un cast:

 int ceil(float a)
 {
 return (int)(a+1);
 }

 int floor(float a)
 {
 return (int)a;
 }

 int round(float a)
 {
 return (ceil(a-0.5) == ceil(a) ? ceil(a) : floor(a));
 }

 Attention: ce code ne fonctionne qu'avec les nombres positifs.

(Publicité)
namikaze
  1. Posté le 11/04/2012 à 20:31:52  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
dans ce cas je vais essayer
 je me soucie pas des nombres négatifs car je me sers uniquement de nombres positifs, des angles pour être précis [O° ; 360° ]
 j'ai crée un petit programme pour tester cette fonction sur mon projet.
 test vendredi je vous tiendrais au courant promis  :)
 merci beaucoup à vous !

paraboloide-hyperbolique
Sur la bonne voie (de 100 à 499 messages postés)
  1. Posté le 12/04/2012 à 19:09:49  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
De rien :)

namikaze
  1. Posté le 16/04/2012 à 14:24:08  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
cette solution n'a hélas pas fonctionner. Mon prof m'a expliquer que c'est parce que dans mon projet,un robot doit recevoir un programme (celui ou je voulais imposer la fonction round) et est doter de librairies limitées en fonctions et ne dispose pas de cette dernière.
 Sur ce je vais abandonner l'idée d'arrondir des valeurs

 merci à vous quand même.

(Publicité)
 Page :
1

Aller à :
 

Sujets relatifs
Plus de sujets relatifs à : fonction round sur c++

Les 5 sujets de discussion précédents Nombre de réponses Dernier message
OFFRE DE STAGES/MISSIONS HUMANITAIRES ETE 2012 0
unexpected T_STRING 0
Problèmes pour créer une galerie d'image 0
Tutoriel JSF, Spring et Hibernate 0
Création de logiciel à petit prix 0