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!