La mise en œuvre rapide/approximation de la fonction pow() en C/C++
Je suis à la recherche pour une mise en œuvre plus rapide ou bien une approximation de fonctions fournies par cmath
.
J'ai besoin pour accélérer les fonctions suivantes
pow(x,y)
exp(z*pow(x,y))
où z<0
. x
est de (-1.0,1.0) et y
est de (0.0, 5.0)
Vous êtes à la recherche de quelque chose de ce genre? martin.ankerl.com/2007/10/04/...
Les valeurs négatives de x?!? Get real, man!
Utiliser l'assembleur en ligne pour ce faire? mais, pour les valeurs négatives de z et de x....
edgar.holleis: Exemple: -0.1^2.0
Vous aurez à décider (et de poster ici, si vous le pouvez) combien de l'exactitude et de l'espace vous êtes prêts à donner de la vitesse. Comment grand d'une table pouvez-vous tenir? Quelle est la relative précision dont vous avez besoin? Combien de vitesse, vous devez avoir?
Les valeurs négatives de x?!? Get real, man!
Utiliser l'assembleur en ligne pour ce faire? mais, pour les valeurs négatives de z et de x....
edgar.holleis: Exemple: -0.1^2.0
Vous aurez à décider (et de poster ici, si vous le pouvez) combien de l'exactitude et de l'espace vous êtes prêts à donner de la vitesse. Comment grand d'une table pouvez-vous tenir? Quelle est la relative précision dont vous avez besoin? Combien de vitesse, vous devez avoir?
OriginalL'auteur zoli2k | 2010-02-27
Vous devez vous connecter pour publier un commentaire.
Voici quelques approxmiations:
Si cette approximation pour la pow n'est pas assez bon, vous pouvez toujours essayer de le remplacer avec la fonction exponentielle, en fonction de votre machine et du compilateur cela pourrait être plus rapide:
x^y = e^(y*ln(x))
e^(z * x^y) = e^(z * e^(y*ln(x)))
Un autre truc, c'est lorsque certains paramètres de la formule ne change pas souvent. Donc, si par exemple x et y sont pratiquement constante, vous pouvez précalculer x^y et de le réutiliser.
OriginalL'auteur martinus
Quelles sont les valeurs possibles de x et y?
Si ils sont dans des limites raisonnables, le renforcement de certaines tables de recherche pourrait aider.
retour en bas de vote. Je pense qu'il est parfaitement raisonnable de répondre. Si pow est un goulot d'étranglement et vous avez un niveau de précision requis vers le bas pour l'e-6 alors le calcul préalable pourrait être le chemin à parcourir. Je le fais beaucoup, et pas seulement avec pow.
OriginalL'auteur Alex Jenter
Je recommande les routines dans le livre "Les mathématiques boîte à outils pour la Programmation en Temps Réel" par Jack W. Crenshaw.
Vous pouvez également mettre votre code pour montrer comment vous êtes l'appel de ces fonctions, il y a peut-être quelques autres de niveau supérieur possibilités d'optimisation qui ne sont pas apparents à partir de la description donnée jusqu'à présent.
OriginalL'auteur Paul R