Чем отличается 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 работает внутри? Разница в производительности ничего особенного, но мне просто любопытно!

Ответы на вопрос(8)

Ваш ответ на вопрос