Si consideri il seguente codice:Perché sqrt in ambito globale è molto più lento di std :: sqrt in MinGW?
#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;
}
Corre 5.5s sul mio computer. Tuttavia, se cambio sqrt
in std::sqrt
, verrà eseguito solo 0,7 s.
so che se uso sqrt
, sto usando la funzione di libreria C, e se uso std::sqrt
, sto usando quello in <cmath>
.
Ma <cmath>
non definisce uno per int
, e se cambio il tipo di i
in double
, che verrà eseguito per la parità di velocità. Quindi il compilatore non sta ottimizzando per int
. Questo sembra accadere solo a sqrt
in Windows.
Quindi perché è std::sqrt
molto più veloce di sqrt
, ma non altre funzioni? E perché in Linux non lo sono?
Flag di ottimizzazione? – Columbo
Qual è la versione del compilatore e questo è MinGW (.org) o MinGW-w64? – rubenvb
C++ 11 aggiunge il supporto per argomenti interi a 'std: sqrt': http://en.cppreference.com/w/cpp/numeric/math/sqrt –