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