Division float par float en c++

joe amouz Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
 joe amouz -
Bonjour à tous,

Je travaille actuellement sur un exercice en c++, j'aimerais récupérer le quotient entier de la division d'un float par un float. S'il vous plait est-ce possible ? Si c'est le cas comment faire parce que je m'en sort pas.nMerci d'avance.



A voir également:

4 réponses

armasousou Messages postés 1268 Date d'inscription   Statut Membre Dernière intervention   83
 
#include <math.h>

value = round(x);


et -lm dans gcc
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Armasousou,
Round () n'est pas standard en c++ et cela ne récupère que l'entier le plus proche : très différent du quotient...
Pour récupérer la partie entière pour les float, il fait le faire soit-même. 1 ligne ou 2
0
armasousou Messages postés 1268 Date d'inscription   Statut Membre Dernière intervention   83
 
J'ai trouvé ca sur la doc c++ pourtant ^^
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
T'as trouvé quoi ? Que c'était standard ? Ou que ça retourne le dividende ?
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
http://www.manpagez.com/man/3/round/ :
The round() , lround() , and llround() functions conform to ISO/IEC
9899:1999(E)

il est présent dans les pages de man... Tu a vu où qu'il n'était pas standard ? il est standard C99, au moins.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Char Snipeur,
il est standard C99, au moins.
On parle du C++, pas du C...
round() est standard ISO C99, mais pas standard C++.
Il le sera dans la prochaine version ISO de C++ qui intégrera une bonne partie du standard C99.
Mais en attendant, ce n'est pas standard C++...
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
int(x/y);
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
La fonction int () n'existe pas. Peut-être veux-tu parler du cast : (int) x/y ? Je doute que ça fonctionne pour les nombres négatifs.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
en C++ ça fonctionne très bien comme je l'ai écris. Sinon, il y a les fonctions de math sur les double : ceil et floor.
0
armasousou Messages postés 1268 Date d'inscription   Statut Membre Dernière intervention   83
 
ceil et floor renvoi l'entier le plus proche au dessous et dessus de la valeur, c'est pas un arrondi ^^

Mais à la limite, faire lafonction arrondir c'est pas compliqué ^^


Tu fait un modulo par 1.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
le modulo implique d'avoir des entiers, donc d'avoir déjà fait une approximation.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Oui, et puis comme n'importe quel entier modulo 1 fait 0...
0
BOB-XM2 Messages postés 180 Date d'inscription   Statut Membre Dernière intervention   65
 
faudra peut-être forcer le résultat à prendre la forme d'un entier:

float x,y;

cout<<(int)(x/y)<<endl;
0
joe amouz
 
stp BOB-XM2 ça ne risque pas de donner une valeur erronée du quotient ?
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
oui, si la réponse est plus grande que le MAX_INT.
Utilise lround.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Non pas lround () ca arrondie à l'entier le plus proche... Rien à voir avec le quotient.
Ou alors lround (x/y -0.5).
0
BOB-XM2 Messages postés 180 Date d'inscription   Statut Membre Dernière intervention   65
 
lround(x) pour x C [ 0, 0.5[ donne 0 et pour x C [0.5 , 1] donne 1
ca donnera un faut résultat

meme la conversion forcée en int peut générer une erreur, donc tu pourra convertir en un entier long ;)
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
BOB-XM2,
Je suis d'accord avec toi.
C'est pour ça qu'en faisant : lround(x-0.5), on obtient systématiquement le nombre inférieur.
Je ne vois pas en quoi le cast en int génère une erreur. Cela tronquera juste le nombre. Donc, t'obtiendras également le nombre inférieur.

Le seul problème est que cela ne marche pas pour les dividendes négatifs. C'est pourquoi, il faut se faire soi-même la fonction.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
pour être sur de parler de la même chose :
http://www.educationbug.org/a/division.html
dividende/diviseur=quotient.
donc floor(x/y) c'est pas ce qu'il y a de mieux ? après tout, rien ne dit qu'on doit transformer en entier.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
donc floor(x/y) c'est pas ce qu'il y a de mieux ? après tout, rien ne dit qu'on doit transformer en entier.
Ben, l'énoncé initial : j'aimerais récupérer le quotient entier de la division d'un float par un float
Ca me paraît clair...
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
pas à moi. Tu peux très bien récupérer la partie entière du quotient dans un float.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Ben ca revient au même. .. ou alors j'ai pas compris ta pensée.
0