¿Qué hay de diferente en C ++ math.h abs () en comparación con mis abdominales ()

Actualmente estoy escribiendo algunas clases de matemáticas de vectores como glsl en C ++, y acabo de implementar unabs() funciona así:

template<class T>
static inline T abs(T _a)
{
    return _a < 0 ? -_a : _a;
}

Comparé su velocidad con el C ++ predeterminadoabs&nbsp;demath.h&nbsp;Me gusta esto:

clock_t begin = clock();
for(int i=0; i<10000000; ++i)
{
    float a = abs(-1.25);
};

clock_t end = clock();
unsigned long time1 = (unsigned long)((float)(end-begin) / ((float)CLOCKS_PER_SEC/1000.0));

begin = clock();
for(int i=0; i<10000000; ++i)
{
    float a  = myMath::abs(-1.25);
};
end = clock();
unsigned long time2 = (unsigned long)((float)(end-begin) / ((float)CLOCKS_PER_SEC/1000.0));

std::cout<<time1<<std::endl;
std::cout<<time2<<std::endl;

Ahora, los abdominales predeterminados tardan unos 25 ms, mientras que los míos toman 60. Supongo que hay una optimización de bajo nivel. Alguien sabe comomath.h abs&nbsp;trabaja internamente? La diferencia de rendimiento no es nada dramática, ¡pero tengo curiosidad!