Division float par float en c++

joe amouz Messages postés 12 Statut Membre -  
 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.

4 réponses

  1. armasousou Messages postés 1351 Statut Membre 83
     
    #include <math.h>

    value = round(x);

    et -lm dans gcc
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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. armasousou Messages postés 1351 Statut Membre 83
       
      J'ai trouvé ca sur la doc c++ pourtant ^^
      0
    3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      T'as trouvé quoi ? Que c'était standard ? Ou que ça retourne le dividende ?
      0
    4. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    int(x/y);
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      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. armasousou Messages postés 1351 Statut Membre 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
    4. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      le modulo implique d'avoir des entiers, donc d'avoir déjà fait une approximation.
      0
    5. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Oui, et puis comme n'importe quel entier modulo 1 fait 0...
      0
  3. BOB-XM2 Messages postés 183 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
    1. joe amouz
       
      stp BOB-XM2 ça ne risque pas de donner une valeur erronée du quotient ?
      0
    2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      oui, si la réponse est plus grande que le MAX_INT.
      Utilise lround.
      0
    3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Non pas lround () ca arrondie à l'entier le plus proche... Rien à voir avec le quotient.
      Ou alors lround (x/y -0.5).
      0
    4. BOB-XM2 Messages postés 183 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
    5. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      pas à moi. Tu peux très bien récupérer la partie entière du quotient dans un float.
      0
    3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Ben ca revient au même. .. ou alors j'ai pas compris ta pensée.
      0