2012-10-29 6 views
9

में बहुत छोटी संख्या के घातीय (मैं एक उदाहरण है, मुझे विशेष रूप से -1200 की ज़रूरत नहीं है, लेकिन संख्याओं का संग्रह जो -1200 है) में घाटी की गणना करने की कोशिश कर रहा हूं।पायथन

>>> math.exp(-1200) 
0.0 

यह मुझे एक अंडरफ्लो दे रहा है; मैं इस समस्या के आसपास कैसे जा सकता हूं?

किसी भी मदद :)

उत्तर

12

मानक पुस्तकालय में के लिए धन्यवाद, आप decimal मॉड्यूल देख सकते हैं:

>>> import decimal 
>>> decimal.Decimal(-1200) 
Decimal('-1200') 
>>> decimal.Decimal(-1200).exp() 
Decimal('7.024601888177132554529322758E-522') 

आप decimal का समर्थन करता है और अधिक से अधिक कार्यों की जरूरत है, तो आप पुस्तकालय mpmath पर दिखाई दे सकता है , जिसका मैं उपयोग करता हूं और बहुत पसंद करता हूं:

>>> import mpmath 
>>> mpmath.exp(-1200) 
mpf('7.0246018881771323e-522') 
>>> mpmath.mp.dps = 200 
>>> mpmath.exp(-1200) 
mpf('7.0246018881771325545293227583680003334372949620241053728126200964731446389957280922886658181655138626308272350874157946618434229308939128146439669946631241632494494046687627223476088395986988628688095132e-522') 

लेकिन यदि संभव हो, तो आपको देखना चाहिए कि क्या आप अपने समीकरणों को दोबारा जोड़ सकते हैं पूरी तरह से लॉग स्पेस में काम करने के लिए।

+0

धन्यवाद, दशमलव मुझे जो चाहिए वह करता है :) –

+0

मैं लॉग स्पेस में रहने के लिए पुन: प्रयास नहीं कर सकता क्योंकि मैं लॉग ए के साथ काम कर रहा हूं और लॉग इन करता हूं और एक/(ए + बी) की आवश्यकता होती है जिसके लिए लॉग (ए + बी) जो केवल लॉग इन करने और लॉग बी होने पर प्राप्त करने में तुच्छ नहीं है। –

4

जितना संभव हो सके लॉगरिदमिक डोमेन में गणना करने का प्रयास करें। अर्थात। सटीक मूल्य की गणना करने से बचें लेकिन एक्सपोनेंट के साथ काम करते रहें।

एक्सपी (-1200) एक बहुत ही छोटी संख्या है (जैसे एक्सप (1200) बहुत बहुत बड़ा है), तो हो सकता है कि सटीक मूल्य वास्तव में आपकी रुचि में न हो। अगर आपको केवल तुलना करने की आवश्यकता है इन संख्याओं के बाद logarithmic अंतरिक्ष पर्याप्त होना चाहिए।

+0

आपके इनपुट के लिए धन्यवाद। मुझे दो ऐसे मानों को मानकीकृत करने के लिए पूर्ण सटीकता की आवश्यकता है; जैसे मुझे ई^(लॉग ए)/(ई^(लॉग ए) + ई^लॉग (बी)) की आवश्यकता है, क्योंकि मैंने पहली बार लॉग इन किया है और लॉग इन किया है क्योंकि ऐसा इसलिए है क्योंकि मैंने विरोध के रूप में लॉग का उपयोग किया था एक उत्पाद जो बहुत, बहुत बड़ा था। –

+1

@Pi_: umm, 'e^नहीं है (लॉग ए)/(ई^(लॉग ए) + ई^लॉग (बी)) 'बस' ए/(ए + बी)'? – DSM

+0

@astraujums हां लेकिन मेरे पास ए और बी नहीं है। मैंने केवल लॉग इन किया है और लॉग बी है जो 1200 –