Avatar ·

为什么在循环中将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)下没有区别——两个版本都慢。