पर पीआई की सटीक गणना नहीं कर सकता है, मैं यहां नया सदस्य हूं और मैं सीधे इस में ड्राइव करने वाला हूं क्योंकि मैंने अपना पूरा रविवार अपने सिर को पाने के लिए कोशिश कर रहा है।पायथन
मैं पाइथन के लिए नया हूं, पहले सी ++ पर मूलभूत मध्यवर्ती स्तर पर कोडिंग सीखा था (यह 10 सप्ताह का यूनिवर्सिटी मॉड्यूल था)।
मैं पीआई की गणना करने के लिए दो पुनरावृत्त तकनीकों की कोशिश कर रहा हूं लेकिन दोनों थोड़ा गलत हो रहे हैं और मुझे यकीन नहीं है कि क्यों।
विश्वविद्यालय में पहली विधि मुझे सिखाया गया था - मुझे यकीन है कि आप में से कुछ ने इसे पहले देखा है।
x=0.0
y=0.0
incircle = 0.0
outcircle = 0.0
pi = 0.0
i = 0
while (i<100000):
x = random.uniform(-1,1)
y = random.uniform(-1,1)
if (x*x+y*y<=1):
incircle=incircle+1
else:
outcircle=outcircle+1
i=i+1
pi = (incircle/outcircle)
print pi
यह अनिवार्य रूप से -1 +1 दोनों छोरों पर करने के लिए यादृच्छिक (एक्स, वाई) के लिए एक जनरेटर एक विमान पर समन्वय है। फिर यदि x^2 + y^2 < = 1, हम जानते हैं कि बिंदु समन्वय अक्ष द्वारा गठित बॉक्स के भीतर त्रिज्या 1 के एक चक्र के अंदर रहता है।
बिंदु की स्थिति के आधार पर, incircle
या outcircle
के लिए काउंटर बढ़ता है।
पीआई के लिए मान सर्कल के अंदर और बाहर मूल्यों का अनुपात है। समन्वय यादृच्छिक रूप से जेनरेट किए जाते हैं, इसलिए यह भी एक प्रसार होना चाहिए।
हालांकि, बहुत अधिक पुनरावृत्ति मूल्यों पर भी, पीआई के लिए मेरा परिणाम हमेशा 3.65 अंक के आसपास होता है।
दूसरी विधि एक और पुनरावृत्ति है जो बहुभुज की परिधि की गणना करता है, जब तक बहुभुज लगभग एक सर्कल नहीं होता है, फिर, पीआई = परिधि/व्यास। (मुझे धोखाधड़ी की तरह है क्योंकि कोडिंग में math.cos (पीआई) शब्द है, ऐसा लगता है कि मैं पीआई खोजने के लिए पीआई का उपयोग कर रहा हूं, लेकिन यह केवल इसलिए है क्योंकि आप पाइथन पर कोणों का प्रतिनिधित्व करने के लिए आसानी से डिग्री का उपयोग नहीं कर सकते हैं)। लेकिन उच्च पुनरावृत्तियों के लिए भी अंतिम परिणाम 3.20 के आसपास समाप्त होता है, जो फिर से गलत है। कोड यहाँ है:
S = 0.0
C = 0.0
L = 1.0
n = 2.0
k = 3.0
while (n<2000):
S = 2.0**k
L = L/(2.0*math.cos((math.pi)/(4.0*n)))
C = S*L
n=n+2.0
k=k+1.0
pi = C/math.sqrt(2.0)
print pi
मुझे याद है, जब मेरी सी ++ कोर्स कर रही है, कहा जा रहा है कि समस्या एक आम एक है और इसके गणित के लिए, लेकिन कोडिंग भीतर कुछ की वजह से कारण नहीं है, फिर भी मैं कर सकते हैं बिल्कुल याद नहीं है। यह यादृच्छिक संख्या पीढ़ी, या फ्लोटिंग पॉइंट नंबरों का उपयोग करने की सीमाओं, या ... वास्तव में कुछ भी हो सकता है। यह सिर्फ मेरे गणित भी हो सकता है ...
क्या कोई सोच सकता है कि समस्या क्या है?
टीएल; डीआर: पीआई की गणना करने की कोशिश कर रहा है, मैं इसके करीब आ सकता हूं लेकिन कभी भी सटीक नहीं, इससे कोई फर्क नहीं पड़ता कि मैं कितने पुनरावृत्ति करता हूं।
(ओह और दूसरा बिंदु - दूसरे कोड में एस = 2.0 ** के कहने वाली एक पंक्ति है। यदि मैं 2000 से अधिक कुछ भी 'n' सेट करता हूं, तो एस के लिए मान संभालने के लिए बहुत बड़ा हो जाता है और कोड क्रैश हो जाता है मैं इसे कैसे ठीक कर सकता हूं?)
धन्यवाद!
यह एक गणित समस्या है। मोंटे-कार्लो की विधि पाई का अनुमान लगाती है, पीआई नहीं। [यह] (http://rosettacode.org/wiki/Pi#Python) अधिक सटीक होना चाहिए। – Rolbrok
मैंने यह भी देखा है कि पाइथन कभी-कभी इसकी गणनाओं पर थोड़ा सा बंद होता है। उदाहरण के लिए, 'तन (45)' डिग्री लागू करते समय यह 0.9 99 99 लौटाता है ... –
@ अश्विन गुप्ता यह सिर्फ पायथन की कमी नहीं है, लेकिन कोई भी भाषा जो फ्लोटिंग पॉइंट अंकगणित लागू करती है। इसके अलावा, यह तन (45) है जो 1 के बराबर है। – Reti43