Alternative à Math.Pow

illy86 Messages postés 15 Date d'inscription samedi 14 avril 2007 Statut Membre Dernière intervention 4 août 2011 - 4 août 2011 à 12:37
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 - 7 août 2011 à 11:43
Bonjour,

J'utilise la fonction Math.Pow sur deux doubles dans une double boucle parcourant toute une image.
Cette méthode me coûte trop de mémoire et ralentit tout les calculs.
Je n'ai pas trouvé d'alternative à Math.Pow, quelqu'un a-t-il une idée ?
Il n'est pas possible de faire x*x*x... y fois, puisque y n'est pas entier.

Merci

9 réponses

BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
4 août 2011 à 13:45
Hello,
Il n'est pas possible de faire x*x*x... y fois, puisque y n'est pas entier.

Dans quel cas l'utilises-tu? En traitement d'images, si tel est ton cas, on n'hésite pas à approximer les formules mathématiques...

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
illy86 Messages postés 15 Date d'inscription samedi 14 avril 2007 Statut Membre Dernière intervention 4 août 2011
4 août 2011 à 13:56
Je l'utilise dans une version servant à faire la conversion de l'espace de couleurs XYZ en LAB. Ce code est pris sur http://www.easyrgb.com/math.php?MATH=M7#text7
0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
4 août 2011 à 14:46
Ah oui, effectivement... Difficile de passer à côté...
Néanmoins, il est peut-être possible d'optimiser le calcul en "sauvegardant" tes calculs précédents. En gros, il ne faudrait calculer qu'une seule fois un même (X/Xn)^1/3


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
illy86 Messages postés 15 Date d'inscription samedi 14 avril 2007 Statut Membre Dernière intervention 4 août 2011
4 août 2011 à 15:16
Mais dans ce cas, je ne vois pas comment faire puisqu'il faut refaire ce calcul pour chaque pixel de l'image ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
4 août 2011 à 15:21
Rien ne t'interdit de stocker des valeurs et vérifier si elles n'ont pas déjà été calculées avant de lancer l'artillerie


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
illy86 Messages postés 15 Date d'inscription samedi 14 avril 2007 Statut Membre Dernière intervention 4 août 2011
4 août 2011 à 15:27
Pas bête.
Tu veux dire que si l'on est déjà tombé sur cette valeur, alors il ne sert à rien de recalculer la conversion ?
Je vais réfléchir à cela.
Je te remercie.
0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
4 août 2011 à 15:38
Oui, c'est ça. En gros, pour chaque pixel:
- est-ce que la conversion a déjà été faite?
- oui: je prend
- non: je calcule, je stocke, je prend

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
illy86 Messages postés 15 Date d'inscription samedi 14 avril 2007 Statut Membre Dernière intervention 4 août 2011
4 août 2011 à 17:20
Après avoir testé, cette méthode semble ralentir encore plus la vitesse de calcul ... :(
D'autres idées ??
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
7 août 2011 à 11:43
Bonjour

Et oui le stockage coute cher, surtout que tu sembles déjà avoir une consommation mémoire importante
Je ne pense pas que ce soit la méthode Math.Pow qui soit gourmande, il vaudrait mieux regarder comment tu peux minimiser ta consommation mémoire
car si tu swappes c'est l'enfer.
Si tu as un multi corps tu peux aussi paralléliser le traitement.

Bob.
C# is amazing, enjoy it!
0
Rejoignez-nous