2013-07-10 12 views
5

मैं Decimal के लिए बिजली की गणना करना चाहते हैं में दशमलव के लिए गिना जा रहा है शक्ति:तरह अजगर में अजगर

from decimal import Decimal 
Decimal.power(2,2) 

ऊपर Decimal('2)

मैं कैसे Decimals के लिए बिजली की गणना कर सकते हैं के रूप में मेरे लौटने चाहिए?

संपादित करें:

decimal.InvalidOperation: x ** (non-integer) 

स्टैकट्रेस: ​​ यह मैं क्या किया

y = Decimal('10')**(x-deci_x+Decimal(str(n))-Decimal('1')) 

x, deci_x दशमलव प्रकार

लेकिन अभिव्यक्ति ऊपर के हैं के रूप में त्रुटि फेंक है

Traceback (most recent call last): 
    File "ha.py", line 28, in ? 
    first_k_1=first_k(2,n-1,k) 
    File "ha.py", line 18, in first_k 
    y = Decimal('10')**(x-deci_x+Decimal(str(n))-Decimal('1')) 
    File "/usr/lib64/python2.4/decimal.py", line 1709, in __pow__ 
    return context._raise_error(InvalidOperation, 'x ** (non-integer)') 
    File "/usr/lib64/python2.4/decimal.py", line 2267, in _raise_error 
    raise error, explanation 
+0

@ मयंक जैन आप गैर-पूर्णांक मानों के साथ '**' का उपयोग नहीं कर सकते हैं। 'गणित' मॉड्यूल से 'पाउ' फ़ंक्शन का उपयोग करके नीचे दिए गए समाधान पर नज़र डालें। – danodonovan

+0

@danodonovan - लेकिन समस्या यह है कि अगर मैं पाउ लागू करता हूं तो मेरी परिशुद्धता कम हो जाएगी ... –

+0

पायथन 3 में।4, 'दशमलव' में आपकी सहायता के लिए 'पावर' फ़ंक्शन – danodonovan

उत्तर

8

आप ** का उपयोग कर बिजली की गणना कर सकते हैं:

2**3 # yields 8 

a = Decimal(2) 
a**2 # yields Decimal(4) 

अपने अद्यतन के बाद, मेरे लिए ठीक लग रहा है:

>>> x = Decimal(2) 
>>> deci_x = Decimal(1) 
>>> n=4 
>>> y = Decimal('10')**(x-deci_x+Decimal(str(n))-Decimal('1')) 
>>> y 
Decimal('10000') 
+0

धन्यवाद है। कृपया मेरा संपादित प्रश्न देखें। –

0

अजगर में> = 3.4 Decimal के रूप में एक power function है।

>>> decimal.power(Decimal('2'), Decimal('2.5')) 

या बस math मॉड्यूल का उपयोग कर;

from math import pow 
pow(2, 2) 

दशमलव

>>> pow(Decimal('2'), Decimal('2')) 

और गैर पूर्णांक दशमलव भी काम करेंगे

>>> pow(Decimal('2'), Decimal('2.5')) 
+0

'>>> timeit.timeit (" पाउ (ए, बी) ", सेटअप =" गणित आयात पाउ से; दशमलव आयात दशमलव से; ए, बी = दशमलव ('10 '), दशमलव (' 123 ') ", संख्या = 1000) 0.00 9331226348876953' यह ** ** 9 3 9 पाउ ** '>> timeit.timeit ("एक ** बी", सेटअप = "गणित आयात पाउ से; दशमलव आयात दशमलव से; ए, बी = दशमलव ('10 '), दशमलव (' 123 ') ", संख्या = 1000) 0.031520843505859375' यह ** 0.0315 * है \ * \ *** – HennyH

+0

@ हेनीह य गति! – danodonovan

3

तुम बस शक्ति ऑपरेटर ** दशमलव के साथ उपयोग कर सकते हैं का उपयोग कर ...

print(Decimal(2)**Decimal(2)) # 4 

संपादित करें, आपके सवाल

आप दशमलव() के डंक पार्स करने के लिए की जरूरत नहीं है इसका अनुसरण करे ...

from decimal import Decimal 
x, deci_x, n = Decimal(2), Decimal(3), 4 
y = Decimal(10)**(x-deci_x+Decimal(n)-Decimal(1)) 
print(y) # 100 
+0

आपकी मदद के लिए धन्यवाद। कृपया मेरा संपादित प्रश्न देखें। –

0

अजगर 2.4.6 दशमलव के लिए गैर पूर्णांक शक्तियों का समर्थन नहीं करता। decimal.py में __pow__ विधि से:

def __pow__(self, n, modulo = None, context=None): 
    #[snip] 
    if not n._isinteger(): 
     return context._raise_error(InvalidOperation, 'x ** (non-integer)') 

अगर x-deci_x+Decimal(str(n))-Decimal('1') हमेशा एक पूर्णांक है, यह पूर्णांक प्रकार में तब्दील एक प्रतिपादक के रूप में यह प्रयोग करने से पहले। यदि आपको एक्सपोनेंट को गैर-पूर्णांक होने की आवश्यकता है, तो पाइथन के एक नवीनतम संस्करण में अपग्रेड करने पर विचार करें।