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 :

rounding hyper rapide en c/c++


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 45
    Par défaut rounding hyper rapide en c/c++
    Bonjour,

    Question a priori simple si il en est, mais quand même:

    quelle est la routine la plus rapide en C/C++ pour calculer un arrondi à n décimales?

    pour le moment j'utilise ça:
    inline double round(double dNum, double dStep)
    { // rounds to closest dStep increment
    double dVal = dStep * ((dStep > 0) ? (int)(dNum / dStep) : 0);
    if (dNum-dVal<dStep/2) return dVal;
    else return dVal + dStep;
    }

    il doit exister mieux.

    d'avance merci,

    bv

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    est-ce que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return ( dStep * floor(dNum/dStep) ) ;
    irait plus vite ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 45
    Par défaut
    Merci, mais sauf erreur de ma part:

    floor(dNum/dStep) ~ (int)(dNum/dStep)

    donc c'est un arrondi à l'incrément inférieur, n'est ce pas?
    Je cherche l'arrondi au plus proche et vraiment le plus rapide.


    bv

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    oui mais si tu fais floor((dNum+0.5)/dStep) ça le fait pas ??

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 45
    Par défaut
    le 0.5 serait un dStep/2 pour moi, mais ça peut le faire.
    'floor' est plus rapide qu'un cast en int ?

    merci
    bv

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    aucune idée....

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/05/2008, 03h33
  2. Calcul rapide de percentiles
    Par benj63 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 08/12/2006, 14h50
  3. LES TECHNIQUES DES SGBDR / MySQL rapide ???
    Par SQLpro dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/09/2003, 11h16
  4. [VBA Excel] Effacer rapidement une feuille
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/10/2002, 13h12

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