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 :

Alternative à Math.Pow


Sujet :

C#

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Alternative à Math.Pow
    Bonjour,

    Quelqu'un aurait-il une idée pour éviter d'utiliser la fonction Math.Pow(x,y) où x et y sont des doubles ?
    J'utilise cette fonction en traitement d'images pour des conversions d'espaces de couleurs (RGB to XYZ) sur toute une image.
    Ceci est très couteux en temps de calcul.

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Es-tu sur que ca vient du Pow? Je vois pas trop pourquoi ca prendrait du temps et en plus je n'y connais pas d'alternative.

  3. #3
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Tu pourrais créer une dll en c++ avec la même fonction dedans, l'ajouter à ton projet et faire les appels dessus.

    Je pense que ça réduirait ton temps d'éxecution mais il faut que les grands manitous du CLR confirment ;p

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Non honnetement, je n'y vois aucun interêt.
    En décompilant .Net, on voit bien que Pow appelle directement une fonction non managée système. De plus, ca doit être une opération de base sur les CPU actuels et je vois pas comment on pourrait la faire aller plus vite.

    Je réitère ma question, es-tu sur que ca soit Pow? As tu des métriques précises qui te permettent de l'affirmer?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    En commentant les Math.Pow, il n'y a aucune perte au niveau du temps de calcul.

  6. #6
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 493
    Points
    5 493
    Par défaut
    Je ne suis pas sûr de comprendre ce que tu as voulu dire. Si c'est bien Math.Pow le fautif (Nathanael a raison d'insister), il suffit d'en calculer une valeur approchée. Certaines sont bien connues et se trouvent facilement sur Internet. Il y a aussi des algos pour certains cas particuliers.

    Accessoirement, je confirme que Math.Pow sera vraisemblablement aussi rapide que son équivalent C++, sans le coût de l'interop en plus. Et je suis prêt à parier qu'elle finit inlinée.

  7. #7
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Ah ben c'est sur qu'un code qui fait rien sera (normalement) toujours plus rapide qu'un code qui travaille

    Néanmoins, il manque du contexte: combien de fois la fonction est elle appellée par exemple?

    Pour pouvoir faire de telles assomptions, il faut sortir des stats précises avec notamment l'aide d'un profiler comme fourni avec certaines versions de visual studio ou dotTrace par exemple.
    Ca donne un résultat comme joint et on voit directement ce qui prend du temps ou pas. Car le coup de "je commente du code" c'est un peu le Chat de Schrödinger
    Images attachées Images attachées  

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par illyria86 Voir le message
    En commentant les Math.Pow, il n'y a aucune perte au niveau du temps de calcul.
    Supprimer les calculs permet en effet d'avoir beaucoup moins de problèmes sur les temps de calcul.....

Discussions similaires

  1. erreur avec math.pow
    Par ricky78 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 30/01/2011, 20h51
  2. Alternative a Math.pow();
    Par likster dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/03/2010, 13h39
  3. Math.Pow -> je comprends rien
    Par Mecano14 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 10/04/2009, 07h43
  4. [Math] Méthodes plus rapides que Math.pow ou .exp ?
    Par alexandre1975 dans le forum Langage
    Réponses: 4
    Dernier message: 15/06/2008, 15h53
  5. fonction math : pow()
    Par uriotcea dans le forum C++Builder
    Réponses: 12
    Dernier message: 05/10/2006, 11h05

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