Pourquoi remplacer 0.1f par 0 ralentit le code de 10 fois dans Visual Studio 2010 ?
Bonjour à tous ! J'écris en C++ dans Visual Studio 2010. J'ai écrit une simple boucle pour des calculs en virgule flottante, mais j'ai remarqué un comportement étrange. Si dans la condition de la boucle on utilise le nombre 0.1f, le code s'exécute rapidement. Si on le remplace par 0 (ou tout autre nombre entier, par exemple 1), la performance chute d'environ 10 fois. Voici un exemple :
```cpp
const float x = 1.0f;
for (int i = 0; i < 100000000; ++i) {
// Variante rapide : if (x < 0.1f)
// Variante lente : if (x < 0)
}
```
Je compile en Release avec les optimisations /O2. Pourquoi une telle différence ? Le compilateur fait-il quelque chose de travers ? Ou est-ce une particularité du SSE/FPU ? Je serais reconnaissant pour une explication, car je suis dans une impasse. Merci d'avance !
<<>>
Racine du problème : nombres dénormalisés et pénalité de leur traitement
La différence de performance
No answers yet.
Connectez-vous pour laisser une réponse