2 एक्स एक्स एक्सपी (एक्स) की तुलना में तेजी से गणना करने के लिए है?


12

भोले को क्षमा करें जो इस प्रश्न को पूछने के तरीके के साथ-साथ इस तथ्य से भी स्पष्ट होगा कि मैं इसे पूछ रहा हूं।

गणितज्ञ आमतौर पर उपयोग करते हैं क्योंकि यह सिद्धांत में सबसे सरल / सबसे अच्छा आधार है (पथरी के कारण)। लेकिन कंप्यूटर बाइनरी में सब कुछ करने लगते हैं, इसलिए क्या यह गणना करने के लिए मशीन पर तेज़ है ?exp2**xMath::exp(x)


7
आप किस नंबर की बात कर रहे हैं? आर्बिटरी के आकार का पूर्णांक? फिक्स्ड-आकार फ़्लोटिंग पॉइंट? मनमाना-सटीक तैरता बिंदु?
गाइल्स का SO- बुराई पर रोक '12

@ गिल्स यह एक अच्छी बात है। मुझे नहीं पता था कि अंतर महत्वपूर्ण था।
isomorphismes

3
मैंने कुछ कैसियो पॉकेट कैलकुलेटर्स पर देखा है कि एक गैर-ई नंबर की लॉग और पावर ln / exp की तुलना में बहुत धीमी है
phuclv

2
कुंद होने का जोखिम उठाने के लिए, क्या आपने उन दोनों को समय देने की कोशिश की है और देखते हैं कि कौन सा तेज है? या आप एक जटिलता भावना में गति की बात कर रहे हैं ? O(f(n))
jmite

1
भाषा सबसे तेज़ तरीके का चयन करने के लिए प्रभारी है और इस पर एक अच्छा काम करेगी। केवल तभी जब अधिकतम गति की आवश्यकता होती है, और माप से पता चला है कि यह प्रदर्शन के लिए प्रासंगिक है क्या आपको इस तरह के सामान के बारे में चिंता करनी चाहिए
vonbrand

जवाबों:


18

चूंकि यह CS है और Stackoverflow नहीं है, इसलिए मैं मान रहा हूँ कि आप संख्यात्मक विश्लेषण के बारे में एक प्रश्न पूछ रहे हैं, और (साधारण चीजें रखने के लिए) IEEE-754 फ़्लोटिंग पॉइंट विशेष रूप से। उस स्थिति में, आपके प्रश्न का उत्तर आंशिक रूप से "आसान" से आप पर निर्भर करता है, और आंशिक रूप से सिस्टम के विवरण पर निर्भर करता है।

exexp2xexp2

जैसा कि ट्रान्सेंडैंटल ऑपरेशन के सभी संख्यात्मक तरीकों के साथ होता है, विचार करने के लिए कुछ विशेष मामले हैं:

exp(NaN) = NaN
exp(+Inf) = +Inf
exp(-Inf) = 0

exp(x)x<104x>88.7exp(x)1.0xexp2

ex=2x/ln21ln2exp2K

exp2(x)=2n×T[j]×P(y)

nxT2j/Kj[0,K)P2x[0,1K)2nTP

f2xm12x1x[1,1]

यद्यपि x87 ट्रान्सेंडैंटल निर्देशों का समर्थन करता है, ट्रान्सेंडैंटल फ़ंक्शन का सॉफ़्टवेयर लाइब्रेरी कार्यान्वयन कई मामलों में तेज हो सकता है।

संपादित करें: यह टिप्पणियों में बताया गया है कि मुझे IEEE 754-2008 में प्रयुक्त कुछ नई शब्दावली की व्याख्या करनी चाहिए। 1985 और 1987 के बाद से कुछ भाषा बदल गई है, और अधिकांश लोग पुराने शब्दजाल से अधिक परिचित हैं।

"बाइनरी 32" और "बाइनरी 64" शब्द 32-बिट और 64-बिट बाइनरी फ्लोटिंग-पॉइंट संख्या के लिए नए नाम हैं, जिन्हें पुराने मानक क्रमशः "सिंगल" और "डबल" कहा जाता है।

शब्द "सबऑनॉर्मल नंबर" पिछले शब्द "डेजेनॉर्मल नंबर" या "डनॉमिनेटेड नंबर" की जगह लेता है ।


जब आप "उप-असामान्य" कहते हैं - तो आपका स्पष्ट रूप से "उप-गौसियन" से मतलब नहीं है; क्या आपका मतलब है "[विशिष्टता के कुछ बेंचमार्क]" से भी बदतर?
isomorphismes

2
@isomorphismes यहां, 'सबमनॉर्मल' इस बात के संबंध में है कि कैसे झांकियों को लागू किया जाता है। विकिपीडिया पर असामान्य संख्याएँ देखें ।
पॉल मंटा

संयोग से, मैंने "विशिष्ट विधि" को थोड़ा छोटा किया। यहां प्रस्तुत विधि के विस्तार के साथ, केवल एक छोटे (और समझने में काफी आसान) का उपयोग करके ul2 सटीकता के साथ exp2 () और exp () को लागू करना संभव है, लेकिन छोटे से आसान समझने वाले विस्तार की व्याख्या संभवतः लंबाई की दोगुनी होगी उत्तर!
छद्म नाम

6

2**x2x<<1 << x


4
वास्तव में ऐसा नहीं है। x शायद एक फ्लोटिंग-पॉइंट टाइप
phuclv

1
x

यदि xपूर्णांक (कहते हैं 20.75) नहीं है, तो आप सबसे सटीक अनुमान (सटीक प्रतिनिधित्व संभव नहीं होने) 2के xरूप में राउंडेड मान के लिए मंटिसा को और घातांक को निर्धारित करेंगे । जो भी, `p p too की तुलना में बहुत तेज़ है।
दमन

1

यदि 2**xपूर्णांकों पर एक फ़ंक्शन है, तो मैं स्टीफन के जवाब से सहमत हूं, शिफ्ट सस्ता है। लेकिन मैं आम तौर पर के रूप में देखते हैं कि 2^xऔर **चल बिन्दु घातांक से संकेत मिलता है। इस मामले के लिए, मैं के बीच इसी तरह के प्रदर्शन उम्मीद होती है **और ^दोनों के बाद से expऔर pow(के लिए अंतर्निहित आपरेशन **) दोनों दिव्य सन्निकटन संचालन कर रहे हैं।


दिलचस्प है, मुझे नहीं पता **था कि फ्लोटिंग-पॉइंट संस्करण का एक पर्याय माना जाता था (और, मुझे मूर्खतापूर्ण, मैं भूल गया था कि दोनों अलग होंगे)।
isomorphismes

1

चूंकि 2 ^ x = e ^ (x * ln 2) और e ^ x = 2 ^ (x * log2 (e)), आप बहुत अंतर की उम्मीद नहीं करेंगे।

शून्य के करीब x के लिए, एक आमतौर पर एक बहुपद का उपयोग करेगा ^ ^ x = 1 + x + x ^ 2/2 + x ^ 3/6 ..., गोलाई को छोटा रखते हुए जल्द से जल्द काटने के लिए अनुकूलित। । स्पष्ट रूप से 2 ^ x गणना करने के लिए एक छोटा, थोड़ा सा धीमा है। "x करीब 0" आमतौर पर x का मान होगा जहाँ sqrt (1/2) <= e ^ x <= sqrt (2) है। एक्स की सीमा को प्रतिबंधित करना सुनिश्चित करता है कि बहुपद की डिग्री को बहुत अधिक नहीं चुना जाना चाहिए।

बड़े x के लिए, आमतौर पर x = x '+ x' को बताकर 2 ^ x की गणना की जाएगी, जहां x 'एक पूर्णांक और -0.5 <= x' '<= 0.5 है। 2 ^ x 'तो छोटे बिट पैटर्न के लिए e ^ x विधि का उपयोग करके सही बिट पैटर्न के साथ एक फ्लोटिंग पॉइंट संख्या और 2 ^ x' का निर्माण करके गणना की जाएगी। यहाँ, 2 ^ x एक छोटा सा तेज है। इसके अलावा, अगर x लार्ज है (x = 100.3 कहो), बस x को log2 (e) से गुणा करने पर अस्वीकार्य गोलाई की त्रुटि आ जाएगी (क्योंकि बहुत कम अंशों में बिट्स होते हैं), इसलिए अधिक देखभाल की आवश्यकता होती है।

और उम्मीद है कि एक अच्छा लाइब्रेरी फंक्शन यह ध्यान रखेगा कि जब भी x <= y, e ^ x <= e ^ y और 2 ^ x <= 2 ^ y हो, तो कोई फर्क नहीं पड़ता कि गोलाई की त्रुटियाँ क्या हैं। उस तरह की चीज को हासिल करना मुश्किल हो सकता है।


0

आपको यह समझ में आ गया है कि कंप्यूटर पर गणित अलग-अलग सॉफ्टवेयरों द्वारा अलग-अलग तरीकों से किया जाता है, उम्मीद है कि लगातार उत्तर आएंगे। अधिकांश सॉफ़्टवेयर को देखकर मुझे लगता है कि कंप्यूटर अच्छा व्यवहार करते हैं - कंप्यूटर और 0 ^ 0 की तरह यहां तक ​​कि लंबे समय तक उत्तर की गणना करेंगे। समस्या यह है कि विशेष मामलों में "मान्यता" शामिल है जो डिजिटल कंप्यूटरों में मुफ्त में नहीं होती है। इसका मतलब है कि केवल उन मामलों में जहां उत्तर होने से चीजों को गति मिलेगी "सबसे" अनुकूलन होगा। लेकिन उन मामलों में यह बहुत अच्छी तरह से घटित होगा। यह भी ध्यान दें कि सही उत्तर प्राप्त करने के लिए कई अलग-अलग मान्यताएँ करनी पड़ सकती हैं। इसे गति अनुकूलन स्तर कहा जाता है और यह GNU "C" नामक अधिकांश सॉफ़्टवेयर के आधार पर अधिकतम पेशेवर सीमा तक हुआ है। ऐसा इसलिए है क्योंकि यहां सॉफ्टवेयर से लेकर सॉफ्टवेयर और मशीन से मशीन तक के रन टाइम में अंतर को गुणवत्ता स्वीकृति के आंकड़ों के रूप में इस्तेमाल किया जाता है। अन्य दुभाषियों में आमतौर पर केवल तभी होता है जब "शून्य ध्वज" पिछले गणना के साइड इफेक्ट के रूप में होता है, जिससे मान्यता को गति मिलेगी। जैसे 0 * x => C0।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.