2 votes

Comparaison des codes et performances

Dans la mise en œuvre d'une bibliothèque à haute performance, j'ai vu le code suivant

double meanQ=0; 
int counter=0;
for(...){
    //some cycle with many iterations where meanQ and counter are incremented
}
meanQ /= (double)counter + 0.001D;

La dernière ligne me semble confuse. Je ferais simplement

if(counter>0)
    meanQ /= counter;

Quand counter es 0 entonces meanQ est également 0 sinon il est divisé par counter . Il est également (légèrement) plus précis en tant que moyenne, il n'y a pas de moulages, il est plus simple à comprendre. A priori, le if et la somme devrait avoir une performance similaire, mais je ne peux pas tester cela sur ma machine pour le moment.

Y a-t-il une différence entre les deux approches ? La version actuelle de la bibliothèque est-elle plus performante ou y a-t-il d'autres raisons de la préférer à ma proposition ?

0voto

Si meanQ /= (double)counter + 0.001D; est à l'intérieur d'une boucle, ce code est plus rapide que le dernier code :

 if(counter>0)
    meanQ /= counter;  

dans la boucle.

En effet, à chaque itération, il doit vérifier que le compteur est à 0, et le fait d'avoir le if() fera toute la différence.

La somme et la fonction if() n'auront pas la même complexité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X