Avatar ·

为什么在 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,并且