Mi chiedevo perché c'è sqrt (funzione) in C/C++ come si può ottenere lo stesso utilizzandoDifferenza tra sqrt (x) e pow (x, 0,5)
pow(x,0.5);
come è sqrt(x)
diversa per pow(x,0.5)
. C'è una ragione specifica per avere la funzione sqrt?
Mi chiedevo perché c'è sqrt (funzione) in C/C++ come si può ottenere lo stesso utilizzandoDifferenza tra sqrt (x) e pow (x, 0,5)
pow(x,0.5);
come è sqrt(x)
diversa per pow(x,0.5)
. C'è una ragione specifica per avere la funzione sqrt?
ho eseguito un test per voi per controllare le prestazioni di sqrt(x)
e pow(x,0.5)
1.
for(int i=0;i<100000000;i++)
pow(double(i),0.5);
2.
for(int i=0;i<100000000;i++)
sqrt(double(i));
prima ha preso circa 20 secondi in cui come secondo uno ha impiegato circa 2 secondi sul mio computer. Quindi le prestazioni sono decisamente migliori. Come altri hanno già menzionato la leggibilità è un'altra ragione.
Ho ottenuto i risultati opposti ... –
In realtà ho eseguito il test 3 volte solo per essere sicuro. Non ho avuto molta variazione. Si prega di controllare di nuovo. – banarun
[Test it] (http://ideone.com/dlwLGR). –
Certo, se si pensa solo l'equivalenza matematica ...
Ma in termini di algoritmi per calcolare il risultato, sqrt
è specifico per una cosa, mentre pow
è generico.
Quindi si potrebbe (giustamente) presumere che sia possibile scrivere una funzione più rapida per sqrt
piuttosto che scrivere la funzione generica pow
.
Ricordo di aver letto da qualche parte che sqrt() è un caso speciale che è garantito dalla specifica IEEE da arrotondare correttamente. Lo guarderò per trovare una fonte. Dovrebbe essere un po 'più veloce, perché deve gestire solo un caso.
Anche se fossero uguali, è bello avere un alias incorporato per una funzione comunemente utilizzata!
Modifica: Secondo l'IEEE-754, si suppone che sia la funzione pow() sia sqrt() siano implementate in modo tale che il valore arrotondato sia la rappresentazione a virgola mobile più vicina possibile al valore reale. Tuttavia, sqrt() dovrebbe essere ancora più veloce.
Vedere http://stackoverflow.com/questions/22259537/ –
Non penso che ci sia un motivo speciale per questo. Poiché l'operazione di radice quadrata è molto comune e 'sqrt (x)' migliora la leggibilità rispetto a 'pow()'. – GeekFactory
perché c'è una bicicletta quando c'è una bicicletta? –
Perché abbiamo una moltiplicazione quando puoi semplicemente aggiungere un ciclo? –