¿Por qué reemplazar 0.1f por 0 en un bucle ralentiza el código 10 veces (C++, VS2010)?
¡Hola a todos! Soy nuevo en C++ y me encontré con un problema muy extraño al perfilar código. Tengo un bucle simple que calcula la suma de cuadrados. Aquí está el código:
```cpp
float sum = 0.0f;
for (int i = 0; i < 100000000; ++i) {
float x = i * 0.1f; // línea A
sum += x * x;
}
```
Este código funciona muy rápido (alrededor de 0.2 segundos en mi Visual Studio 2010 en Release x64). Pero si reemplazo `0.1f` por `0` (simplemente cero):
```cpp
float sum = 0.0f;
for (int i = 0; i < 100000000; ++i) {
float x = i * 0; // línea B
sum += x * x;
}
```
...entonces el rendimiento cae 10 veces. El código se ejecuta en aproximadamente 2 segundos. Uso Visual Studio 2010, compilación en modo Release (/O2), SSE2 habilitado. ¿Por qué sucede esto? Después de todo, multiplicar por cero debería ser incluso más rápido que por un número fraccionario, ¿no? Verifiqué: el resultado en ambos casos es el mismo (la suma es cero). ¿Qué estoy haciendo mal? ¿Quizás es un bug del compilador?
P.D. En Debug no hay diferencia: ambas variantes