2012-05-23 11 views
14

की मनमानी सटीक मैं जब decimal.Decimal(math.sqrt(2))वर्ग जड़ों

Decimal('1.4142135623730951454746218587388284504413604736328125') 

झुकेंगे और 15 वीं दशमलव स्थान के बाद अंक गलत निकला काफी निराश था। (के बावजूद खुशी से आप ज्यादा से ज्यादा 15 अंक दे रही है!)

मैं पहली बार mसही अजगर में sqrt(n) का दशमलव विस्तार में अंकों कैसे मिल सकता है?

+6

'math.sqrt()' फ्लोट पर चल रहा है। आपको जो कुछ मिला उसके अलावा आप कुछ और क्यों उम्मीद करेंगे। आपको एक बड़ी फ्लोट lib की जरूरत है। एक खोजने के लिए वेबसार्च का प्रयोग करें। –

+8

इसके बजाय दशमलव (2) .sqrt() का प्रयास क्यों न करें? –

उत्तर

42

दशमलव

>>> from decimal import * 
>>> getcontext().prec = 100 
>>> Decimal(2).sqrt() 
Decimal('1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641573') 
>>> 
+10

+1। मैं इस के पक्ष में अपना जवाब हटा रहा हूं। –

+0

मुझे लगता है कि हमारे उत्तरों को पोस्ट में पार करना होगा, जबकि मैं सटीक सेट करने के लिए 'pydoc'ing था ;-) –

+0

+1 - एक अच्छा, संक्षिप्त, सटीक उत्तर। – duffymo

4

आईईईई मानक डबल परिशुद्धता फ्लोटिंग पॉइंट संख्याओं में केवल सटीकता के 16 अंक हैं। किसी भी सॉफ्टवेयर/हार्डवेयर आईईईई का उपयोग करता है बेहतर नहीं कर सकते:

http://en.wikipedia.org/wiki/IEEE_754-2008

आप सभी गणित कार्यों के लिए इसका इस्तेमाल करने के लिए लागू के साथ, एक विशेष BigDecimal वर्ग कार्यान्वयन आवश्यकता होगी। जावा में ऐसी चीज है। अजगर करता है, भी:

http://en.literateprograms.org/Arbitrary-precision_elementary_mathematical_functions_%28Python%29

5

आप bigfloat कोशिश कर सकते हैं। परियोजना पृष्ठ से उदाहरण:

from bigfloat import * 
sqrt(2, precision(100)) # compute sqrt(2) with 100 bits of precision 
+5

गाह। मुझे उस पुस्तकालय से नफरत है। :-) –

+1

@ मार्क डिकिंसन क्यों? यह मेरे लिए अच्छा लग रहा है। – wong2

+7

@ wong2: मुझे लगता है कि आप स्माइली से चूक गए हैं। मार्क डिकिंसन bigfloat के लेखक हैं। –

0

पर sqrt विधि का उपयोग करें मैं sqrt (एन) पायथन में का दशमलव विस्तार में पहली मीटर सही अंक कैसे मिल सकता है?

एक तरीका यह संख्या उदाहरण के लिए, sqrt(2) के पहले 20 दशमलव स्थानों को देखने के लिए 10 के लिए आवश्यक शक्ति से गुणा integer square root गणना करने के लिए है, तो आप कर सकते हैं:

>>> from gmpy2 import isqrt 
>>> num = 2 
>>> prec = 20 
>>> isqrt(num * 10**(2*prec))) 
mpz(141421356237309504880) 

isqrt समारोह है वास्तव में विकिपीडिया पेज पर प्रदान किए गए एल्गोरिदम का उपयोग करके स्वयं को लागू करने में काफी आसान है।

+2

यह 'दशमलव 'मॉड्यूल' दशमलव (2) .sqrt() 'की गणना करने के लिए क्या कर रहा है, यह बिल्कुल ठीक है। :-) –

+0

@ मार्क: जानना अच्छा है। हालांकि, पिछली बार मैंने कोशिश की, यह "मैन्युअल" करने से बहुत धीमी थी। –

+0

हाँ, पायथन 2 दशमलव मॉड्यूल शुद्ध पायथन था, और इसकी गति के लिए कभी भी ज्ञात नहीं है। यह पायथन 3 में थोड़ा बेहतर होना चाहिए (या पायथन 2 के लिए 'cdecimal' पीईपीआई बैकपोर्ट का उपयोग करना)। –

संबंधित मुद्दे