Pourquoi remplacer 0.1f par 0 dans une boucle ralentit le code de 10 fois (C++, VS2010) ?
Bonjour à tous ! Je suis débutant en C++ et j'ai rencontré un problème très étrange lors du profilage de code. J'ai une simple boucle qui calcule la somme des carrés. Voici le code :
```cpp
float sum = 0.0f;
for (int i = 0; i < 100000000; ++i) {
float x = i * 0.1f; // ligne A
sum += x * x;
}
```
Ce code fonctionne très rapidement (environ 0,2 seconde sur mon Visual Studio 2010 en Release x64). Mais si je remplace `0.1f` par `0` (simplement zéro) :
```cpp
float sum = 0.0f;
for (int i = 0; i < 100000000; ++i) {
float x = i * 0; // ligne B
sum += x * x;
}
```
...alors les performances chutent de 10 fois ! Le code s'exécute en environ 2 secondes. J'utilise Visual Studio 2010, compilation en mode Release (/O2), SSE2 activé. Pourquoi cela se produit-il ? Pourtant, la multiplication par zéro devrait être encore plus rapide que