2016-05-12 3 views
0

Was wäre die schnellste Lösung, einen Index um einen Bereich zu wickeln, wenn der Code mehrmals in einer Schleife aufgerufen wird?Was wäre effizienter für Geschwindigkeit modulo oder if-Anweisung?

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

Die Beispiele 1 und 2 scheinen nicht dasselbe zu tun. Es ist ein bisschen so, als würden wir gefragt, ob Äpfel oder Orangen besser schmecken. –

+0

Sorry startIndex sollte firstIndex im Modulo-Beispiel gewesen sein – ANewGalaxy

+1

Sehr wahrscheinlich ist dies [vorzeitige Optimierung] (https://en.wikipedia.org/wiki/Program_optimization#When_to_optimize), und es wird sehr wenig Unterschied zwischen den beiden sein. Wenn Sie wirklich wissen müssen, dann kann nur das Testen Ihnen sagen, was besser ist, nachdem JIT es getan hat. Ich würde vorschlagen, dass Sie bei dem Code bleiben, der die * Absicht * des Codes besser zeigt, der Beispiel 1 wäre. – Andreas

Antwort

1

Sie sind wahrscheinlich so nah, dass es in der Praxis keine Rolle spielt. Wenn Sie wirklich herausfinden wollen, wickeln Sie jeden Ansatz in eine Schleife, die es 100.000 oder 1M Mal und Zeit es tut.

Meine Vermutung ist, die "wenn" -Aussagen werden schneller sein. Es ist nur ein Add, und ein Paar vergleicht und verzweigt Aussagen, die "billige" Anweisungen in einem Prozessor sind. Der Modul erfordert mindestens so viele Aussagen, aber teurere.

Verwandte Themen