मैं सोच रहा था कि exp()
अधिक सामान्य pow()
से अधिक तेज़ है। मैं जेएसपीरफ़ http://jsperf.com/pow-vs-exp पर तेजी से बेंचमार्क चलाता हूं और यह मेरे लिए दिलचस्प परिणाम दिखाता है।Pow() बनाम एक्सपी() प्रदर्शन
Math.exp(logBase * exponent); // fastest
Math.exp(Math.log(base) * exponent); // middle
Math.pow(base, exponent); // slowest
मुझे पता है कि परिणाम वास्तुकला और भाषा पर काफी भिन्न होंगे लेकिन मुझे सैद्धांतिक दृष्टिकोण में भी रूचि है। pow(a, b)
exp(log(a) * b)
के रूप में लागू किया गया है या क्या कुछ और चालाक तरीका है कि कैसे सह गणना शक्ति "सीधे" (सी ++, सी # या जावास्क्रिप्ट में)। क्या कुछ आर्किटेक्चर पर एक्सप, लॉग या पाउ के लिए सीपीयू निर्देश हैं?
जहाँ तक मुझे पता है, exp()
और log()
दोनों कुछ टेलर श्रृंखला का उपयोग करके गणना की जाती हैं और गणना करने के लिए बहुत महंगे हैं। यह मेरा विश्वास है बिजली की निरंतर आधार के लिए है कि, इस कोड
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
यह वास्तव में कार्यान्वयन विस्तार पर निर्भर करेगा। जावास्क्रिप्ट के बारे में आपका सवाल विशेष रूप से है? –