Чем отличается C ++ math.h abs () от моего abs ()
В настоящее время я пишу некоторые glsl как классы векторной математики в C ++, и я только что реализовалabs()
функционировать так:
template<class T>
static inline T abs(T _a)
{
return _a < 0 ? -_a : _a;
}
Я сравнил его скорость с C ++ по умолчаниюabs
отmath.h
как это:
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;
Теперь абс по умолчанию занимает около 25 мс, а мой - 60. Я полагаю, что происходит некоторая оптимизация низкого уровня. Кто-нибудь знает какmath.h
abs
работает внутри? Разница в производительности ничего особенного, но мне просто любопытно!