2016-05-12 6 views
0

Quelle serait la meilleure solution pour enrouler un index autour d'une plage si j'appelais le code plusieurs fois dans une boucle?Quoi de plus efficace pour la vitesse modulo ou if statement?

int length = 4; 
int firstIndex = 4; 
int lastIndex = 7; 
int currIndex = 4; 

// Example 1 (if statement) 
    // Incrementing currIndex 
     if (++currIndex > lastIndex) 
      currIndex = firstIndex; 
    // Decrementing currIndex 
     if (--currIndex < firstIndex) 
      currIndex = lastIndex 

// Example 2 (Modulo) 
    // Incrementing currIndex 
     currIndex = firstIndex + (++currIndex % length); 
    // Decrementing currIndex 
     currIndex = firstIndex + ((--currIndex + length) % length); 
+0

Les exemples 1 et 2 ne semblent pas faire la même chose. C'est un peu comme nous demander si les pommes ou les oranges ont meilleur goût. –

+0

Désolé startIndex aurait dû être firstIndex dans l'exemple modulo – ANewGalaxy

+1

Il est très probable que ce soit [optimisation prématurée] (https://en.wikipedia.org/wiki/Program_optimization#When_to_optimize), et il y aura très peu de différence entre les deux. Si vous avez vraiment besoin de savoir, seuls les tests peuvent vous dire ce qui est le mieux après que JIT a fait son travail. Je vous suggère de coller avec le code qui montre le mieux * l'intention * du code, ce qui serait l'exemple 1. – Andreas

Répondre

1

Ils sont probablement si proches que cela n'a pas d'importance en pratique. Si vous voulez vraiment savoir, enveloppez chaque approche dans une boucle qui le fait 100 000 ou 1M fois et l'heure.

Je pense que les instructions "if" seront plus rapides. C'est seulement un ajout, et un couple de comparer et des instructions de branche qui sont des instructions "bon marché" dans un processeur. Le module nécessite au moins autant de déclarations, mais plus coûteuses.