¿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 demath.h 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 trabaja internamente? La diferencia de rendimiento no es nada dramática, ¡pero tengo curiosidad!

Respuestas a la pregunta(8)

Su respuesta a la pregunta