Рассмотрим следующий код:
#include <cmath>
#include <cstdio>
const int COUNT = 100000000;
int main()
{
double sum = 0;
for (int i = 1; i <= COUNT; ++i)
sum += sqrt(i);
printf("%f\n", sum);
return 0;
}
На моем компьютере он работает 5,5 с. Однако, если я изменю sqrt
на std::sqrt
, он будет работать только 0,7 с.
Я знаю, что если я использую sqrt
, я использую функцию из библиотеки C, а если я использую std::sqrt
, я использую функцию из <cmath>
.
Но <cmath>
не определяет его для int
, и если я изменю тип i
на double
, они будут работать с одинаковой скоростью. Таким образом, компилятор не оптимизирует int
. Кажется, это происходит только с sqrt
в Windows.
Так почему же std::sqrt
намного быстрее, чем sqrt
, но не другие функции? А почему в линуксе их нет?
std:sqrt
: en.cppreference.com/ w/cpp/числовой/математика/sqrt - person Paul R   schedule 24.10.2014double
s, это займет заметно больше времени, чем только сint
s. - person rsethc   schedule 24.10.2014double
(по крайней мере, согласно cppreference, или, может быть, я неправильно его понимаю), что эквивалентно тому, что произойдет с::sqrt
? - person eerorika   schedule 24.10.2014g++ test.cpp -o test
, без флага оптимизации. Я протестировал его с помощью компилятора с mingw.org, как 32-битного, так и 64-битного. Я не использую С++ 11. - person infmagic2047   schedule 24.10.2014-S
для gcc)? - person filmor   schedule 24.10.2014