Я работаю над несколькими упражнениями Эйлера для улучшения моих знаний о С++.
Я написал следующую функцию:
int a = 0,b = 0,c = 0;
for (a = 1; a <= SUMTOTAL; a++)
{
for (b = a+1; b <= SUMTOTAL-a; b++)
{
c = SUMTOTAL-(a+b);
if (c == sqrt(pow(a,2)+pow(b,2)) && b < c)
{
std::cout << "a: " << a << " b: " << b << " c: "<< c << std::endl;
std::cout << a * b * c << std::endl;
}
}
}
Это вычисляется за 17 миллисекунд.
Однако, если я изменяю строку
if (c == sqrt(pow(a,2)+pow(b,2)) && b < c)
to
if (c == sqrt((a*a)+(b*b)) && b < c)
вычисление происходит через 2 миллисекунды. Есть ли некоторые очевидные детали реализации pow(int, int)
, которые я пропускаю, что делает первое выражение вычисляемым так медленнее?