Division float par float en c++

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.

4 réponses

Résumé de la discussion

Le problème consiste à récupérer le quotient entier de la division de deux floats en C++, en distinguant tronquer, arrondir ou convertir en entier selon le comportement souhaité. Par exemple, on peut écrire (int)(x/y) pour tronquer, utiliser floor ou ceil selon le sens, ou employer lround pour un arrondi au plus proche; chacune a ses limites selon le type. En cas de signe négatif, le comportement diffère selon la méthode choisie, et les fonctions floor, ceil ou lround imposent des conversions de type et une précision des floats qui peuvent influencer le résultat.

Bobot (l’IA à votre service)
  1. #include <math.h>

    value = round(x);

    et -lm dans gcc
    0
    1. Contributeur
      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
    2. J'ai trouvé ca sur la doc c++ pourtant ^^
      0
    3. Contributeur
      T'as trouvé quoi ? Que c'était standard ? Ou que ça retourne le dividende ?
      0
    4. Contributeur
      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
    5. Contributeur
      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
  2. Contributeur
    int(x/y);
    0
    1. Contributeur
      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
    2. Contributeur
      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
    3. 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
    4. Contributeur
      le modulo implique d'avoir des entiers, donc d'avoir déjà fait une approximation.
      0
    5. Contributeur
      Oui, et puis comme n'importe quel entier modulo 1 fait 0...
      0
  3. faudra peut-être forcer le résultat à prendre la forme d'un entier:

    float x,y;

    cout<<(int)(x/y)<<endl;
    0
    1. stp BOB-XM2 ça ne risque pas de donner une valeur erronée du quotient ?
      0
    2. Contributeur
      oui, si la réponse est plus grande que le MAX_INT.
      Utilise lround.
      0
    3. Contributeur
      Non pas lround () ca arrondie à l'entier le plus proche... Rien à voir avec le quotient.
      Ou alors lround (x/y -0.5).
      0
    4. 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
    5. Contributeur
      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
  4. Contributeur
    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
    1. Contributeur
      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
    2. Contributeur
      pas à moi. Tu peux très bien récupérer la partie entière du quotient dans un float.
      0
    3. Contributeur
      Ben ca revient au même. .. ou alors j'ai pas compris ta pensée.
      0