Avatar ·

Por que substituir 0.1f por 0 deixa o código 10 vezes mais lento no Visual Studio 2010?

Olá a todos! Escrevo em C++ no Visual Studio 2010. Escrevi um loop simples para cálculos com ponto flutuante, mas notei um comportamento estranho. Se na condição do loop uso o número 0.1f, o código roda rápido. Se substituo por 0 (ou qualquer outro número inteiro, como 1), a performance cai cerca de 10 vezes. Aqui está um exemplo: ```cpp const float x = 1.0f; for (int i = 0; i < 100000000; ++i) { // Versão rápida: if (x < 0.1f) // Versão lenta: if (x < 0) } ``` Estou compilando em Release com otimizações /O2. Por que essa diferença? O compilador está fazendo algo errado? Ou é uma característica do SSE/FPU? Agradeço uma explicação, pois estou confuso. Desde já, obrigado! <<>>

Raiz do problema: números denormalizados e penalidade por processá-los

A diferença de performance está relacionada a como o processador lida com números denormalizados (subnormais). Quando você compara float x = 1.0f com 0, o resultado é false, e