ed oltre all'osservazione di carattere matematico di MItaly, la tendenza da seguire sempre nella scrittura di codice ottimizzato è quella di ridurre al minimo il costo delle operazioni elementari. Qui ci sarebbe da fare un discorso, datasheet del processore alla mano, sul peso (numero cicli) che un'operazione comporta. Ora con le potenze in gioco non è un problema fare qualche migliaio di divisioni modulari e computare un if... ma volendo risparmiare anche su quello:
e come risultato di una prova:codice:public static void main (String[] args) { long totalEven = 0; long start = System.nanoTime(); for (int i = 0; i < 10000; i++) { if (i % 2 == 0) { totalEven += i; } } long end = System.nanoTime(); System.out.println("Elapsed Time: "+(end-start)+"\nSum: "+totalEven); totalEven = 0; start = System.nanoTime(); for (int i = 0; i < 10000; i+=2) { totalEven+=i; } end = System.nanoTime(); System.out.println("\n\nElapsed Time: "+(end-start)+"\nSum: "+totalEven); }
come vedi c'è un fattore 3 di differenza...codice:Elapsed Time: 264192 Sum: 24995000 Elapsed Time: 88703 Sum: 24995000

Rispondi quotando