Вы можете проверить, является ли число с плавающей запятой ненормальным, используя
#include <cmath>
if ( std::fpclassify( flt ) == FP_SUBNORMAL )
(Предостережение: я не уверен, что это будет выполняться на полной скорости на практике.)
В C ++ 03, и этот код работал для меня на практике,
#include <cmath>
#include <limits>
if ( flt != 0 && std::fabsf( flt ) < std::numeric_limits<float>::min() ) {
// it's denormalized
}
Чтобы решить, где применять это, вы можете использовать анализатор на основе выборки, такой как Shark, VTune или Zoom , чтобы выделить команды, замедленные ненормальными значениями. Микрооптимизация, даже больше, чем другие оптимизации, абсолютно безнадежна без анализа как до, так и после.