Por que substituir 0.1f por 0 em um loop deixa o código 10 vezes mais lento (C++, VS2010)?
Olá a todos! Sou novo em C++ e me deparei com um problema muito estranho ao fazer profiling de código. Tenho um loop simples que calcula a soma dos quadrados. Aqui está o código:
```cpp
float sum = 0.0f;
for (int i = 0; i < 100000000; ++i) {
float x = i * 0.1f; // linha A
sum += x * x;
}
```
Este código é muito rápido (cerca de 0,2 segundos no meu Visual Studio 2010 em Release x64). Mas se eu substituir `0.1f` por `0` (apenas zero):
```cpp
float sum = 0.0f;
for (int i = 0; i < 100000000; ++i) {
float x = i * 0; // linha B
sum += x * x;
}
```
...o desempenho cai 10 vezes! O código leva cerca de 2 segundos. Estou usando Visual Studio 2010, compilação em modo Release (/O2), SSE2 ativado. Por que isso acontece? Afinal, multiplicar por zero deveria ser ainda mais rápido do que por um número fracionário, não é? Eu verifiquei — o resultado é o mesmo em ambos os casos (a soma é zero). O que estou fazendo de errado? Será que é um bug do compilador?
P.S. No depurador (Debug) não há diferença — ambas as varia