exp()
이 더 일반적인 것보다 더 빠르면 궁금합니다. pow()
. 나는 JsPerf http://jsperf.com/pow-vs-exp에서 빠른 벤치 마크를 실행하고 나에게 흥미로운 결과를 보여 주었다.Pow() 대 exp() 성능
Math.exp(logBase * exponent); // fastest
Math.exp(Math.log(base) * exponent); // middle
Math.pow(base, exponent); // slowest
그 결과는 아키텍처와 언어에 따라 크게 달라질 것이지만 이론적 관점에도 관심이 있습니다. pow(a, b)
은 exp(log(a) * b)
으로 구현 되었습니까? 아니면 "직접"(C++, C# 또는 JavaScript로) 전력을 어떻게 계산하는지 더 똑똑한 방법이 있습니다. 일부 아키텍처에서는 exp, log 또는 pow에 대한 CPU 지침이 있습니까?
내가 아는 한, exp()
과 log()
은 일부 테일러 (Taylor) 시리즈를 사용하여 계산되며 계산하는 데 꽤 비쌉니다. 이 날
double logBase = log(123.456);
for (int i = 0; i < 1024; ++i) {
exp(logBase * 654.321);
}
이
for (int i = 0; i < 1024; ++i) {
pow(123.456, 654.321);
}
보다 더 나은 코드, 전원의 상수 기지 그렇게 생각하게 올바른 가정인가요?
이러한 옵션 중 하나가 다른 옵션보다 훨씬 정확하다면 놀라지 않을 것입니다. – delnan
나는 약 2-5 %의 오차가있다. 테스트를 몇 번 실행하십시오.그러나 벤치 마크는 물론 완벽한 것이 아닙니다. 그래서 나는이 이론에 관심이있다. 또한 정밀도는 흥미로운 질문입니다. – NightElfik
이것은 실제로 구현 세부 사항에 달려 있습니다. JavaScript에 대한 질문이 구체적입니까? –