为什么在 Visual Studio 2010 中将 0.1f 替换为 0 会使代码慢 10 倍?
Всем привет! Пишу на C++ в Visual Studio 2010. Написал простой цикл для вычислений с плавающей точкой, но заметил странное поведение. Если в условии цикла стоит число 0.1f, код работает быстро. Если заменить его на 0 (или любое другое целое число, например 1), производительность падает примерно в 10 раз. Вот пример:
```cpp
const float x = 1.0f;
for (int i = 0; i < 100000000; ++i) {
// Быстрый вариант: if (x < 0.1f)
// Медленный вариант: if (x < 0)
}
```
Я компилирую в Release с оптимизациями /O2. Почему такая разница? Компилятор что-то делает не так? Или это особенность SSE/FPU? Буду благодарен за объяснение, потому что я в тупике. Заранее спасибо!
问题的根源:非规格化数及其处理惩罚
性能差异与处理器如何处理非规格化(次正规)数有关。当您将float x = 1.0f与0比较时,结果为false,并且