पायथन 59 बाइट्स
print reduce(lambda x,p:p/2*x/p+2*10**999,range(6637,1,-2))
यह 1000 अंकों को प्रिंट करता है; आवश्यकता से थोड़ा अधिक 5. निर्धारित पुनरावृत्ति का उपयोग करने के बजाय, यह इसका उपयोग करता है:
pi = 2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + 5/11*(2 + ...)))))
6637
(अंतरतम भाजक) के रूप में तैयार किया जा सकता:
अंक * 2 * लॉग 2 (10)
इसका तात्पर्य एक रेखीय अभिसरण से है। प्रत्येक गहरी पुनरावृत्ति पीआई के एक और बाइनरी बिट का उत्पादन करेगी ।
यदि , हालांकि, आप टैन -1 की पहचानका उपयोग करने पर जोर देते हैं, तो एक समान अभिसरण प्राप्त किया जा सकता है, यदि आप समस्या के बारे में थोड़ी गंभीरता से विचार नहीं करते हैं। आंशिक रकम पर एक नज़र रखना:
4.0, 2.66667, 3.46667, 2.89524, 3.33968, 2.97605, 3.28374, ...
यह स्पष्ट है कि प्रत्येक शब्द अभिसरण बिंदु के दोनों ओर आगे और पीछे कूदता है; श्रृंखला में प्रत्यावर्तन अभिसरण है। इसके अतिरिक्त, प्रत्येक शब्द पिछले शब्द की तुलना में अभिसरण बिंदु के करीब है; यह अपने अभिसरण बिंदु के संबंध में बिल्कुल नीरस है। इन दोनों गुणों के संयोजन का तात्पर्य है कि किन्हीं दो पड़ोसी शब्दों के अंकगणितीय माध्य स्वयं के किसी भी शब्द की तुलना में अभिसरण बिंदु के अधिक निकट हैं। आपको मेरा क्या मतलब है इसका एक बेहतर विचार देने के लिए, निम्नलिखित छवि पर विचार करें:
बाहरी श्रृंखला मूल है, और आंतरिक श्रृंखला पड़ोसी की प्रत्येक शर्तों का औसत निकालकर पाई जाती है। एक उल्लेखनीय अंतर। लेकिन जो वास्तव में उल्लेखनीय है, वह यह है कि इस नई श्रृंखला में वैकल्पिक अभिसरण भी है, और इसके अभिसरण बिंदु के संबंध में बिल्कुल एकरस है। इसका मतलब है कि इस प्रक्रिया को बार-बार, एड nauseum पर लागू किया जा सकता है।
ठीक है। पर कैसे?
कुछ औपचारिक परिभाषाएँ। चलो पी 1 (एन) हो n वें पहले अनुक्रम की अवधि, पी 2 (एन) हो n वें दूसरे क्रम की अवधि, और इसी तरह पी कश्मीर (एन) n वें की अवधि कश्मीर वें ऊपर परिभाषित अनुक्रम ।
पी 1 = [पी 1 (1), पी 1 (2), पी 1 (3), पी 1 (4), पी 1 (5), ...]
पी 2 = [(पी 1 (1) + पी 1 (2)) / 2, (पी 1 (2) + पी 1 (3)) / 2, (पी 1 (3) + पी 1 (4) / / 2, (पी 1 (4) + पी 1 (5)) / 2, ...]
पी 3 = [(पी 1 (1) + 2 पी 1 (2) + पी 1 (3)) / 4, (पी 1 (2) + 2 पी 1 (3) + पी 1 (4)) / 4, (पी 1 (3) + 2P 1 (4) + P 1 (5)) / 4, ...]
पी 4 = [(पी 1 (1) + 3 पी 1 (2) + 3 पी 1 (3) + पी 1 (4)) / 8, (पी 1 (2) + 3 पी 1 (3) + 3 पी 1 (4) + पी 1 (5)) / 8, ...]
आश्चर्य नहीं कि ये गुणांक बिल्कुल द्विपद गुणांक का अनुसरण करते हैं, और पास्कल के त्रिभुज की एकल पंक्ति के रूप में व्यक्त किया जा सकता है। चूंकि पास्कल के त्रिभुज की एक मनमानी पंक्ति गणना करने के लिए तुच्छ है, एक मनमाने ढंग से 'गहरी' श्रृंखला पाई जा सकती है, बस पहली n आंशिक रकम लेकर, पास्कल त्रिकोण की k वीं पंक्ति में संबंधित शब्द से प्रत्येक को गुणा करें और 2 से विभाजित करें। के -1 ।
इस तरह, पूर्ण 32-बिट फ़्लोटिंग पॉइंट प्रिसिजन (~ 14 दशमलव स्थान) को केवल 36 पुनरावृत्तियों के साथ प्राप्त किया जा सकता है, जिस बिंदु पर आंशिक रकम दूसरे दशमलव स्थान पर भी परिवर्तित नहीं हुई है। यह स्पष्ट रूप से गोल्फ नहीं है:
# used for pascal's triangle
t = 36; v = 1.0/(1<<t-1); e = 1
# used for the partial sums of pi
p = 4; d = 3; s = -4.0
x = 0
while t:
t -= 1
p += s/d; d += 2; s *= -1
x += p*v
v = v*t/e; e += 1
print "%.14f"%x
यदि आप मनमानी परिशुद्धता चाहते थे, तो इसे थोड़ा संशोधन के साथ प्राप्त किया जा सकता है। यहां एक बार फिर से 1000 अंकों की गणना की जा रही है:
# used for pascal's triangle
f = t = 3318; v = 1; e = 1
# used for the partial sums of pi
p = 4096*10**999; d = 3; s = -p
x = 0
while t:
t -= 1
p += s/d; d += 2; s *= -1
x += p*v
v = v*t/e; e += 1
print x>>f+9
P का प्रारंभिक मान 2 10 बड़ा शुरू होता है , जो कि s / d के पूर्णांक विभाजन के प्रभावों का प्रतिकार करता है क्योंकि d बड़ा हो जाता है, जिससे अंतिम कुछ अंक परिवर्तित नहीं हो पाते हैं। एक बार फिर यहां देखें 3318
:
अंक * लॉग 2 (10)
Iteratations की समान संख्या पहले एल्गोरिथ्म के रूप में (आधा कर दिया क्योंकि टी द्वारा कम हो जाती है 1 के बजाय 2 प्रत्येक यात्रा)। एक बार फिर, यह एक रैखिक अभिसरण को इंगित करता है: प्रति पुनरावृत्ति पीआई का एक बाइनरी बिट । दोनों मामलों में, 3318 पुनरावृत्तियों को पीआई के 1000 अंकों की गणना के लिए आवश्यक है , क्योंकि 5 की गणना करने के लिए 1 मिलियन पुनरावृत्तियों की तुलना में थोड़ा बेहतर कोटा है।
p=lambda:3.14159