为什么在循环中将0.1f替换为0会使代码变慢10倍 (C++, VS2010)?
大家好!我是C++新手,在分析代码时遇到了一个非常奇怪的问题。我有一个简单的循环,用于计算平方和。代码如下:
```cpp
float sum = 0.0f;
for (int i = 0; i < 100000000; ++i) {
float x = i * 0.1f; // 行A
sum += x * x;
}
```
这段代码运行得非常快(在我的Visual Studio 2010 Release x64下大约0.2秒)。但如果我将`0.1f`替换为`0`(仅仅是零):
```cpp
float sum = 0.0f;
for (int i = 0; i < 100000000; ++i) {
float x = i * 0; // 行B
sum += x * x;
}
```
...性能下降了10倍!代码执行时间约为2秒。我使用的是Visual Studio 2010,Release模式编译(/O2),SSE2已启用。为什么会这样?按理说乘以零应该比乘以小数更快,不是吗?我验证过——两种情况下结果相同(总和为零)。我哪里做错了?难道是编译器bug?
附:在调试器(Debug)下没有区别——两个版本都慢。