Avatar ·

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