O que há de diferente em C ++ math.h abs () em comparação com meu abs ()

Atualmente, estou escrevendo algumas glsl, como aulas de matemática vetorial em C ++, e acabei de implementar umabs() funcionar assim:

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

Comparei sua velocidade com o C ++ padrãoabs demath.h como isso:

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;

Agora o abs padrão leva cerca de 25ms enquanto o meu leva 60. Acho que há alguma otimização de baixo nível acontecendo. Alguém sabe comomath.h abs trabalha internamente? A diferença de desempenho não é nada dramática, mas estou curiosa!

questionAnswers(8)

yourAnswerToTheQuestion