Pourquoi 2 * (i * i) est-il plus rapide que 2 * i * i en Java ?
Bonjour à tous ! J'écris un simple benchmark pour comparer les performances de la multiplication en Java. J'ai remarqué un comportement étrange : le code avec l'expression `2 * (i * i)` s'exécute systématiquement plus rapidement que `2 * i * i`. Voici un exemple :
```java
public class Test {
public static void main(String[] args) {
long start = System.nanoTime();
long sum = 0;
for (int i = 0; i < 1_000_000_000; i++) {
sum += 2 * i * i; // lent
}
System.out.println(sum);
System.out.println("Time: " + (System.nanoTime() - start) / 1_000_000 + " ms");
}
}
```
Si je remplace `2 * i * i` par `2 * (i * i)`, le temps d'exécution diminue presque de moitié ! Je m'attendais à ce qu'il n'y ait pas de différence, car mathématiquement c'est la même chose. Peut-être que cela est lié à l'ordre des calculs et