Mi chiedevo se lo exp()
è più veloce del più generale pow()
. Corro benchmark veloce su JsPerf http://jsperf.com/pow-vs-exp e ha mostrato risultati interessanti per me.Prestazioni Pow() vs. exp()
Math.exp(logBase * exponent); // fastest
Math.exp(Math.log(base) * exponent); // middle
Math.pow(base, exponent); // slowest
So che i risultati saranno pesantemente variare sull'architettura e il linguaggio, ma io sono interessato a punto di vista teorico anche. pow(a, b)
implementato come exp(log(a) * b)
o c'è un modo più intelligente di come calcolare direttamente la potenza "direttamente" (in C++, C# o JavaScript). Ci sono istruzioni CPU per exp, log o pow su alcune architetture?
Per quanto ne so, sia exp()
sia log()
vengono calcolati utilizzando alcune serie di Taylor e sono piuttosto costosi da calcolare. Questo mi fa credere che per la base costante di potere, questo codice
double logBase = log(123.456);
for (int i = 0; i < 1024; ++i) {
exp(logBase * 654.321);
}
è meglio di questo
for (int i = 0; i < 1024; ++i) {
pow(123.456, 654.321);
}
E 'questo presupposto corretto?
Non sarei sorpreso se una di queste opzioni fosse significativamente più accurata delle altre. – delnan
Ho margine di errore intorno al 2-5%. Prova a eseguire test poche volte.Ma il punto di riferimento è ovviamente tutt'altro che perfetto. Ecco perché sono interessato alla teoria alla base di questo. E anche la precisione è una domanda interessante. – NightElfik
Questo dipenderà davvero dai dettagli di implementazione. La tua domanda su JavaScript è specifica? –