Accueil > Forum > > > > arrondi
arrondi
mercredi 27 octobre 2004 à 21:24:42 |
arrondi

Arnaud16022
|
good-day everybody ya quelques temps je m suis amusé (si on peut dire) a refaire la fonction round() de la TI 83 en TIBasic. Ca marchait super bien, et comme je n'ai rien trouvé de tel en C++ (a part floor, qui fait une troncature, et ceil (je crois)), j'ai voulu implémenter ca. ca donne: double round(double nombre,int arrondi){ double puissance=(double)pow(10,arrondi); return floor(puissance*nombre+0.5)/puissance; } int main() { double nbre=1.123456546; cout << "valeur arrondie de " << nbre << " a 4 chiffres apres la virgule: " << round(nbre,4) << "\n\n"; system("PAUSE"); return 0; } Comme vous le voyez, cette fonction fait un arrondi (pas une troncature! un vrai arrondi a n chiffres apres la virgules), et en TIBasic ca donnait axactement la meme chose que la fonction rand(). Celle ci aussi parche bien, mais commence a planter a partir de 1000, là il aime pas du tout et retourne une valeur arrondie différemment. Voili voilou, si vous savez pourquoi vous etes le bienvenu :) Merci PS: double, long ou float, ca ne change rien du tt :(
|
|
mercredi 27 octobre 2004 à 21:50:08 |
Re : arrondi

Gendal67
|
Euh, tu veux une fonction qui ecrit un nombre selon une précision ? genre le nombre "pi" : 3.1416 ou pi = 3.141, etc ? Ben si tu veux qqch qui gère la présicion, tu as un manipulateur en C++ qui le fait :
cout << setprecision(4) << pi << "\t" << setprecision(3) << pi;
ou en C:
float pi = 3.1416
printf("pi avec 2 chiffres significatifs s'écrit : %.3", pi); // affichage à 0.001 près :)
Genda67, à votre service !
|
|
mercredi 27 octobre 2004 à 22:16:43 |
Re : arrondi

Arnaud16022
|
nan c'est pas ca. ces 2 fonctions je les connais, elles ne font que modifier la précision d'AFFICHAGE. Ma fonction fait un vrai arrondi, comme en maths ou en physique. Ne me demande pas a quoi ca sert, c'est juste pour le fun :)
|
|
mercredi 27 octobre 2004 à 22:42:53 |
Re : arrondi

jpthomasset
|
Une petite remarque sur la précision des types : le type double ne gere pas un nombre infini de nombre après la virgule (de mémoire la précision est de 15 digit mais je suis pas sur), ce qui parfois amener de curieux résultats. Je penche perso pour la solution de Genda67, en c++ du moins : en effet ios_base::precision permet de gerer des arrondis mathématique et ne tronque donc pas le nombre (je n'en suis pas sur pour le printf par contre). Pour info Genda, l'arrondi de 3.1416 à 3 chiffres apres la virgule est 3.142 et pas 3.141. Par contre si tu as besoin d'une grande précision dans les calculs, alors il faut te pencher sur des librairies spécialisés qui permettent de gerer des nombre plus précisement que les types prédefinis. Par exemple GNU MPA+, JP. PS: ta fonction ne marche pas avec les nombre négatifs, il faut retrancher 0.5 dans ce cas !
|
|
mercredi 27 octobre 2004 à 23:10:36 |
Re : arrondi

gagah1
|
Avec ceci ça devrait marcher: double Round(double valeur, int arrondi) { double a, b, c; a = pow(10.0, (double)arrondi); b = (double)(int)(valeur*a); c = fabs(valeur*a - b); if((c>0.5)&&(valeur>0)) return (b+1.0)/a; else if((c>0.5)&&(valeur<0)) return (b-1.0)/a; return b/a; }
|
|
mercredi 27 octobre 2004 à 23:22:34 |
Re : arrondi

Arnaud16022
|
(double)(int)? je vois bien comment ton code marche mais ca je comprend pas.
Sinon effectivement ca devrait marcher, masi moi j'aimerai savoir pourquoi mon prog a moi ne marche pas (c'est qd meme plus simple, il n'y a qu'une ligne!)
|
|
mercredi 27 octobre 2004 à 23:32:56 |
Re : arrondi

djl
|
(int) pour garder que la partie entiere
|
|
jeudi 28 octobre 2004 à 00:02:21 |
Re : arrondi

jpthomasset
|
Le code de gagah fait la meme chose que le tien, à part pour les nombre négatifs. Par contre si ton problème est un problème de précision, alors cela ne va pas regler ton problème. Encore une fois, le double n'est pas d'une précision infinie. Pour info son code peux aussi se résumer en une ligne : double round(double nombre,int arrondi){ double puissance=(double)pow(10,arrondi);
return (nombre>0)?((int)(puissance*nombre+0.5))/puissance:((int)(puissance*nombre-0.5))/puissance;
}
|
et plus clairement : double round(double nombre,int arrondi){ double puissance=(double)pow(10,arrondi);
if (nombre>0) { return floor(puissance*nombre+0.5)/puissance; }else { return floor(puissance*nombre-0.5)/puissance;
}
|
ce qui revient au code de gagah ! A+, JP.
|
|
jeudi 28 octobre 2004 à 11:11:46 |
Re : arrondi

Arnaud16022
|
oui je sais, ya 12 ou 15 chiffres dans un double (je sé plus). mais a partir de 1000, mon prog, qui marche jusque la, ne met plus que 2 chiffres apres la virgule, ce qui fait 4+3=7chiffres, et pas 12!
A priori, meme un float devrait pouvoir le faire.
|
|
jeudi 28 octobre 2004 à 12:00:00 |
Re : arrondi

jpthomasset
|
Réponse acceptée !
Cela vient de la précision d'affichage dont parlait Genda67, pour le contourner, fait un cout.precision(10);
avant le cout<<
A+, JP.
|
|
Cette discussion est classée dans : fonction, arrondi, double, puissance, round
Répondre à ce message
Sujets en rapport avec ce message
round et mfc [ par dambeaufort ]
bonjour,voici mon probleme: je suis sous une application mfc et j'ai une boite Cedit qui me permet d'entrer une valeur numerique (un double pour moi).
Definition de fonction pendant l'execution [ par progueur ]
Bonsoir,Je suis en train de faire un programme de calcul sur des fonctions mathematiques.Et j'aimerais que l'utilisateur puisse entrer sa fonction de
Fonction racine carre puissance et factoriel [ par Samuel0210 ]
Bonjour Voila, g creer 3 fonctions pour calculer la racine carre, la puissance et le factoriel de different nombres elles se compile sans erreur mé e
conversion double en string [ par bouba ]
Bonjour, je réalise une fonction qui doit calculer le nombre de caractères d'un doubleexemple:-7.56 -> 5 caractèreExiste t'il une fonction qui fasse c
c++ : pb avec une fonction extern C [ par nanch07 ]
J'expose tout, voilà: dans une de mes classes je fais appel à une fonction externe en C ( de numerical recipes in C). Mais j'ai également besoin de ce
Utilisation d'un pointeur de fonction membre [ par cyrcocq ]
Bonjour,J'ai déjà discuté de ça ailleurs, on m'a conseillé d'autres méthodes, mais imaginons une classe contenant un ensemble de fonction accessibles
Pb avec Round...? [ par Topsyko ]
Bonjour,J'ai créé une classe pour calculer l'histogramme d'une image, et dans une fonction j'utilise la fonction de math.h Round, et j'ai cette erreur
Graphique f(x)=x^p [ par dustez ]
On me demande de réaliser un programme affichant sous forme textuelle des graphiques représentant les fonction du type f(x)=x^p, à partir des paramètr
programeation d'une type de puissance [ par awalle ]
bon soir à tout le monde j'ai un problème de la fonction puissance en langage C. Mon problème est le faite que, je veux programmer en langage C
aidez moi svp [ par youssielec ]
je cherche a creer un programme qui genere entre 1 et 10 numeros de cartes de credit valides. j dois d abord saisir et valider le nombre de cartes d
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|