IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

calcul d'arrondi


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 241
    Par défaut calcul d'arrondi
    Quelqu'un sait il comment renvoyer l'entier le plus proche d'un nombre à virgule à l'aide de fonctions de base en C?
    Merci.

  2. #2
    mat.M
    Invité(e)
    Par défaut
    Ce n'est pas indiqué dans une FAQ cela ? Ou dans le forum

    ceil()

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 241
    Par défaut
    Non ceil(x) prend le plus petit entier supérieur ou égal à x

  4. #4
    Membre très actif Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Par défaut
    Citation Envoyé par FAQ
    Comment arrondir un réel ?
    [haut]
    auteur : Bob
    Pour arrondir, il suffit de lui ajouter 0.5 puis de le tronquer, voir 'Comment tronquer un réel'.
    Compil your life guy!
    The Aures Project

  5. #5
    Membre éprouvé Avatar de SaintAmand
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 174
    Par défaut
    Citation Envoyé par Goundy
    Citation Envoyé par FAQ
    Comment arrondir un réel ?
    [haut]
    auteur : Bob
    Pour arrondir, il suffit de lui ajouter 0.5 puis de le tronquer, voir 'Comment tronquer un réel'.
    Surement pas. Appliqué à -3,2 on obtient -2 au lieu de -3.
    Soit on ajoute 0,5 et on prend la partie entière (au sens mathématiques) avec la fonction floor, soit on se tourne vers des fonctions comme nearbyint et rint (non conforme Iso C9X).

    --
    SaintAmand

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par SaintAmand
    (non conforme Iso C9X).
    Hum, choisi ton camp camarade. C'est soit C9x soit ISO-C99.

    http://emmanuel-delahaye.developpez.com/notes.htm#norme

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: calcul d'arrondi
    Citation Envoyé par petdelascar
    Quelqu'un sait il comment renvoyer l'entier le plus proche d'un nombre à virgule à l'aide de fonctions de base en C?
    Merci.

    http://c.developpez.com/faq/c/?page=..._round_correct

    Cette fonction semble se comporter correctement.

    Petit exemple de test unitaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    #include <math.h>
    double Arrondit(const double x)
    {
       if (0<=x)
       {
          return floor(x+0.5);
       }
       else
       {
          return ceil(x-0.5);
       }
    }
     
    #include <float.h>
    #define N(a) (sizeof(a)/sizeof*(a))
     
    int main (void)
    {
       struct test
       {
          unsigned long test;
          double in;
          long out;
       }
       a[]=
       {
         {10, 0.0 ,0},
         {11, 1.0 ,1},
         {12, 1.5 - DBL_EPSILON ,1},
         {13, 1.5 ,2},
     
         {20, -0.0 ,0},
         {21, -1.0 ,-1},
         {22, -1.5 + DBL_EPSILON ,-1},
         {23, -1.5 ,-2},
       };
     
       size_t i;
       int err = 0;
     
       for (i = 0; i < N(a) && !err; i++)
       {
          struct test const *p = a + i;
     
          double n = Arrondit (p->in);
     
          if (n != p->out)
          {
             printf ("err at test %lu\n", p->test);
             err = 1;
          }
       }
     
       if (!err)
       {
          puts ("\nP A S S E D\n");
       }
     
       return 0;
    }

  8. #8
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    J'ajoute une petite macro toute simple qui fait le travail très bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define	nint( x ) (x>0.0?(int)(x+0.5):(int)(x-0.5))

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD17] Calcul et arrondi sur les durées
    Par meganulos dans le forum WinDev
    Réponses: 11
    Dernier message: 20/11/2012, 17h04
  2. [IEEE 754] Comment calculer un arrondi ?
    Par samuelinux dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 18/05/2010, 10h01
  3. Calculer un arrondi.
    Par pitispike dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 08/04/2010, 21h02
  4. Calcul et arrondis
    Par nicolasferraris dans le forum Langage
    Réponses: 2
    Dernier message: 22/04/2009, 13h28
  5. Problème de calcul avec arrondis
    Par Flaguette dans le forum Access
    Réponses: 5
    Dernier message: 23/05/2008, 23h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo