Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 2010
-
27 oct. 2004 à 21:24
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 2010
-
28 oct. 2004 à 17:11
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.
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 :(
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 20112 27 oct. 2004 à 21:50
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 :
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 27 oct. 2004 à 22:16
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 :)
jpthomasset
Messages postés95Date d'inscriptionsamedi 19 juin 2004StatutMembreDernière intervention20 avril 2010 27 oct. 2004 à 22:42
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 MP
A+,
JP.
PS: ta fonction ne marche pas avec les nombre négatifs, il faut retrancher 0.5 dans ce cas !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 27 oct. 2004 à 23:22
(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!)
jpthomasset
Messages postés95Date d'inscriptionsamedi 19 juin 2004StatutMembreDernière intervention20 avril 2010 28 oct. 2004 à 00:02
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 :
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 28 oct. 2004 à 11:11
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!