बेली-बोरवेइन-प्लॉफ़ इटरेशंस


16

बेली-बोरवेइन-प्लॉफ़ इटरेशंस

हमने पीपीसीजी पर कुछ पाई चुनौतियों को देखा है, लेकिन कोई भी विशेष रूप से उस एल्गोरिथ्म को निर्धारित नहीं करता है जिसका आपको उपयोग करना चाहिए। मैं किसी भी भाषा में Bailey-Borwein-Plouffe एल्गोरिदम के कार्यान्वयन को देखना चाहता हूं n। सूत्र इस प्रकार है:

संशोधित सूत्र।

आपके एल्गोरिदम को प्रत्येक पुनरावृत्ति को n तक आउटपुट करना चाहिए, इंटरमीडिएट रकम दिखाने के साथ-साथ अंतिम परिणाम "पैंग्ले" बनाने के लिए। आप विकिपीडिया पृष्ठ पर दिखाए गए एल्गोरिदम के कम बहुपद रूप का भी उपयोग कर सकते हैं। एक उदाहरण के लिए चलाते हैंn=50 नीचे दिखाया गया है:

3
3.1
3.14
3.141
3.1415
3.14159
3.141592
3.1415926
3.14159265
3.141592653
3.1415926535
3.14159265358
3.141592653589
3.1415926535897
3.14159265358979
3.141592653589793
3.1415926535897932
3.14159265358979323
3.141592653589793238
3.1415926535897932384
3.14159265358979323846
3.141592653589793238462
3.1415926535897932384626
3.14159265358979323846264
3.141592653589793238462643
3.1415926535897932384626433
3.14159265358979323846264338
3.141592653589793238462643383
3.1415926535897932384626433832
3.14159265358979323846264338327
3.141592653589793238462643383279
3.1415926535897932384626433832795
3.14159265358979323846264338327950
3.141592653589793238462643383279502
3.1415926535897932384626433832795028
3.14159265358979323846264338327950288
3.141592653589793238462643383279502884
3.1415926535897932384626433832795028841
3.14159265358979323846264338327950288419
3.141592653589793238462643383279502884197
3.1415926535897932384626433832795028841971
3.14159265358979323846264338327950288419716
3.141592653589793238462643383279502884197169
3.1415926535897932384626433832795028841971693
3.14159265358979323846264338327950288419716939
3.141592653589793238462643383279502884197169399
3.1415926535897932384626433832795028841971693993
3.14159265358979323846264338327950288419716939937
3.141592653589793238462643383279502884197169399375
3.1415926535897932384626433832795028841971693993751
3.14159265358979323846264338327950288419716939937510

प्रत्येक पुनरावृत्ति की शुद्धता बराबर होनी चाहिए n एल्गोरिदम को पारित करने के लिए , यह कहना है कि प्रत्येक पुनरावृत्ति को nसभी के लिए पारित होने तक पाई की गणना करनी चाहिए k

नियम:

  • बिल्ट-इन की अनुमति नहीं है, न ही है pi , आपको सूत्र का उपयोग करना चाहिए।
  • आपको nउस अधिकतम तक का समर्थन करना चाहिए जो आपकी भाषा की गणना के संदर्भ में अनुमति देता है 16^n। यदि इनपुट x<nनिष्पादन के बाद गणना के दौरान एक अंकगणितीय अतिप्रवाह पैदा कर रहा है क्योंकि आपकी भाषा केवल दशमलव तक का समर्थन करती है2^32-1 , तो यह ठीक है। कोई अन्य धारणा nठीक नहीं है।
  • तुम चाहिए कि कैसे आप उत्पादन मिल गया है, तो यह स्पष्ट नहीं है की एक विवरण प्रदान करते हैं। उदाहरण के लिए, यदि आप एक गोल्फ भाषा में पोस्ट कर रहे हैं तो ब्रेक-डाउन की 100% आवश्यकता होती है। यह सुनिश्चित करना है कि आप उस एल्गोरिथ्म का उपयोग कर रहे हैं जो निर्दिष्ट है।
  • मानक लूप-छेद को बंद कर दिया जाता है।
  • यह कोड-गोल्फ है, यहां सबसे कम बाइट गिनती जीतती है।

संदर्भ कोड (उदाहरण उत्पन्न करने के लिए प्रयुक्त कोड):

public static void main(String[] args) {
    (0..50).each {
        n->
        def x=(0..n).collect {
            j->
            def k=new BigDecimal(j)
            def s={it.setScale(n)}
            def a=s(1.0g).divide(s(16.0g)**s(k))
            def b=s(4.0g)/(s(8.0g)*s(k)+s(1.0g))
            def c=s(2.0g)/(s(8.0g)*s(k)+s(4.0g))
            def d=s(1.0g)/(s(8.0g)*s(k)+s(5.0g))
            def e=s(1.0g)/(s(8.0g)*s(k)+s(6.0g))
            def f=a*(b-c-d-e)
        }.sum()
        println(n + "\t" + x.setScale(n, BigDecimal.ROUND_DOWN))
    }
}

यह क्रियान्वयन बाहर कैप करता है n=255, आप कम या अधिक पर कैप कर सकते हैं।
यह कार्यान्वयन ग्रूवी में किया गया था।


5
एकमात्र नकारात्मक पहलू यह है कि मैं यह सत्यापित करना मुश्किल होगा कि आउटपुट के आधार पर कोई व्यक्ति किस पद्धति का उपयोग कर रहा है, जो आम तौर पर Calculate foo via x methodचुनौतियों के साथ एक समस्या है ।
DJMcMayhem

@DJMcMayhem आपके द्वारा पोस्ट किए जा रहे कोड की एक व्याख्या जोड़ दी गई है यदि यह एक स्पष्ट कार्यान्वयन नहीं है, तो यह सुनिश्चित करने के लिए कि हम वास्तव में बता सकते हैं कि उन्होंने क्या किया। एल्गोरिथ्म वास्तव में काफी सीधा है, हालांकि, यह बहुत बुरा नहीं होना चाहिए।
मैजिक ऑक्टोपस Urn

2
@ DJMcMayhem की टिप्पणी के संबंध में, गैर-अवलोकन कार्यक्रम की आवश्यकताओं से बचने के लिए सलाह देखें ।
पीटर टेलर

2
आपको अधिकतम एन का समर्थन करना चाहिए जो आपकी भाषा अनुमति देती है। अनुमति देता है कैसे? क्या मैं पुनरावर्तन का उपयोग कर सकता हूं? क्या मैं सूचियों का उपयोग कर सकता हूं यदि जनरेटर अधिक मेमोरी-फ्रेंडली होंगे? क्या मैं 2 एन अंकों का उपयोग कर सकता हूं और अंतिम n को काट सकता हूं?
डेनिस

1
स्पष्टता के हित में, मैं केवल उस आउटपुट से पहले अध्यादेशों को हटा दूंगा जो वास्तव में आवश्यक है।
डेनिस

जवाबों:


8

05AB1E , 63 52 50 बाइट्स

विशेषज्ञता सूत्र

΃0NU62201122vy͹̰*8X*N>+÷+}16Xm÷+DX>£X__iÀ'.ìÁ},

इसे ऑनलाइन आज़माएं!

BBP सूत्र

ƒ4¹>°UX*8N*©>÷YX*®4+÷-1X*®5+÷-1X*®6+÷-1X*16Nm÷*ODN>£N__iÀ'.ìÁ},

इसे ऑनलाइन आज़माएं!


1
"आपके एल्गोरिदम को प्रत्येक पुनरावृत्ति को n तक आउटपुट करना चाहिए, इंटरमीडिएट सम्स और साथ ही अंतिम परिणाम को" जियांगले "बनाने के लिए दिखाना चाहिए।", मूल रूप से केवल 0 से n तक यह प्रदर्शन करते हैं, प्रत्येक को स्टैक पर धकेलते हैं और यह अच्छा होगा।
मैजिक ऑक्टोपस Urn

1
@carusocomputing: हो सकता है कि वर्तमान पुनरावृत्ति n के आउटपुट पर शब्द बदलना वैकल्पिक हो क्योंकि मैंने समझा कि केवल अंतिम परिणाम आवश्यक है।
इमिग्ना

या हो सकता है कि यह सिर्फ मुझे पढ़ने में बुरा हो (मुझे पता है कि मैं उन हिस्सों को छोड़ देता हूं जब मुझे लगता है कि मेरे पास है)
Emigna

4
शायद सिर्फ हम , लेकिन निश्चित रूप से सिर्फ आप ही नहीं ।
डेनिस

@carusocomputing: Iterations जोड़ा गया। के रूप में इसे करने के लिए एक सस्ता तरीका खोजने की आवश्यकता है "।" बहुत महंगा था।
इमिग्ना

5

पायथन 2, 109 108 बाइट्स

def f(n):k=1;s=0;t=100**n;exec-~n*'s+=4*t/k-2*t/(k+3)-t/(k+4)-t/(k+5)>>k/2;print"3."[:k]+`s`[1:k/8+1];k+=8;'

Ideone पर इसका परीक्षण करें ।


3

पायथन 2, 174 बाइट्स

यार, यह एक ऐसा समय है जब मैं चाहता हूं कि पायथन के पास दशमलव के लिए अनंत परिशुद्धता रखने का कुछ आसान तरीका है .. संभवतः इस चुनौती के लिए अपनी स्वयं की सटीकता सटीकता प्रकार को लागू करना कम है, लेकिन मैं कल्पना नहीं कर सकता कि कैसे। सूत्र में शब्दशः लिखा है।

from decimal import*
n=input();d=Decimal;getcontext().prec=n+2;p=d(0)
for i in range(n+1):f=8.*i;p+=d(16**(-i))*(4/d(f+1)-2/d(f+4)-1/d(f+5)-1/d(f+6));print str(p)[:-~i+(i>0)]

उदाहरण के लिए आउटपुट n=100(कुछ अतिरिक्त लाइन नंबरों के साथ):

3
3.1
3.14
3.141
3.1415
3.14159
3.141592
3.1415926
3.14159265
3.141592653
3.1415926535
3.14159265358
3.141592653589
3.1415926535897
3.14159265358979
3.141592653589793
3.1415926535897932
3.14159265358979323
3.141592653589793238
3.1415926535897932384
3.14159265358979323846
3.141592653589793238462
3.1415926535897932384626
3.14159265358979323846264
3.141592653589793238462643
3.1415926535897932384626433
3.14159265358979323846264338
3.141592653589793238462643383
3.1415926535897932384626433832
3.14159265358979323846264338327
3.141592653589793238462643383279
3.1415926535897932384626433832795
3.14159265358979323846264338327950
3.141592653589793238462643383279502
3.1415926535897932384626433832795028
3.14159265358979323846264338327950288
3.141592653589793238462643383279502884
3.1415926535897932384626433832795028841
3.14159265358979323846264338327950288419
3.141592653589793238462643383279502884197
3.1415926535897932384626433832795028841971
3.14159265358979323846264338327950288419716
3.141592653589793238462643383279502884197169
3.1415926535897932384626433832795028841971693
3.14159265358979323846264338327950288419716939
3.141592653589793238462643383279502884197169399
3.1415926535897932384626433832795028841971693993
3.14159265358979323846264338327950288419716939937
3.141592653589793238462643383279502884197169399375
3.1415926535897932384626433832795028841971693993751
3.14159265358979323846264338327950288419716939937510
3.141592653589793238462643383279502884197169399375105
3.1415926535897932384626433832795028841971693993751058
3.14159265358979323846264338327950288419716939937510582
3.141592653589793238462643383279502884197169399375105820
3.1415926535897932384626433832795028841971693993751058209
3.14159265358979323846264338327950288419716939937510582097
3.141592653589793238462643383279502884197169399375105820974
3.1415926535897932384626433832795028841971693993751058209749
3.14159265358979323846264338327950288419716939937510582097494
3.141592653589793238462643383279502884197169399375105820974944
3.1415926535897932384626433832795028841971693993751058209749445
3.14159265358979323846264338327950288419716939937510582097494459
3.141592653589793238462643383279502884197169399375105820974944592
3.1415926535897932384626433832795028841971693993751058209749445923
3.14159265358979323846264338327950288419716939937510582097494459230
3.141592653589793238462643383279502884197169399375105820974944592307
3.1415926535897932384626433832795028841971693993751058209749445923078
3.14159265358979323846264338327950288419716939937510582097494459230781
3.141592653589793238462643383279502884197169399375105820974944592307816
3.1415926535897932384626433832795028841971693993751058209749445923078164
3.14159265358979323846264338327950288419716939937510582097494459230781640
3.141592653589793238462643383279502884197169399375105820974944592307816406
3.1415926535897932384626433832795028841971693993751058209749445923078164062
3.14159265358979323846264338327950288419716939937510582097494459230781640628
3.141592653589793238462643383279502884197169399375105820974944592307816406286
3.1415926535897932384626433832795028841971693993751058209749445923078164062862
3.14159265358979323846264338327950288419716939937510582097494459230781640628620
3.141592653589793238462643383279502884197169399375105820974944592307816406286208
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

यह बड़ी संख्या के लिए काम करता है, n=1000कुछ सेकंड में चलता है और n=10000मुझे अभी तक कोई त्रुटि नहीं दी है!


3

हास्केल, 101 100 बाइट्स

@Nimi को बाइट के लिए धन्यवाद।

f n=take(n+2).show$sum[1/16^k*(4/(l+1)-2/(l+4)-1/(l+5)-1/(l+6))|k<-[0..100+n],l<-[8*fromIntegral k]]

सीधा कार्यान्वयन। n15 अंकों (मानक डबल परिशुद्धता) तक की गणना करता है ।


l<-[8*fromIntegral k]के बजाय let ...एक बाइट बचाता है।
nimi

3

जे, 73 64 62 बाइट्स

(j.":"+10&^(<.@*%[)[:+/\16&^%~[:-/4 2 _1 1%1 4 5 6+/*&8)@i.@>:

यह स्वरूपित स्ट्रिंग के रूप में प्रत्येक अंक को n अंक में आउटपुट करता है। यह सूत्र के बहुपद सरलीकरण का उपयोग करता है और 10 की शक्ति से योग को गुणा करके, इसे फ़्लोर करके और 10 की उसी शक्ति से विभाजित करके पहला n अंक प्राप्त करता है।

इनपुट को एक विस्तारित पूर्णांक के रूप में लिया जाता है, जिसका अर्थ है कि डिवीजनों के होने पर परिमेय का उपयोग किया जाता है जो परिणामों को सटीक रखता है।

प्रयोग

यह n = 100 के लिए आउटपुट है , [0, 100] में k के लिए संचयी रकम दिखा रहा है ।

   f =: (j.":"+10&^(<.@*%[)[:+/\16&^%~[:-/4 2 _1 1%1 4 5 6+/*&8)@i.@>:
   f 100x
3                                                                                                     
3.1                                                                                                   
3.14                                                                                                  
3.141                                                                                                 
3.1415                                                                                                
3.14159                                                                                               
3.141592                                                                                              
3.1415926                                                                                             
3.14159265                                                                                            
3.141592653                                                                                           
3.1415926535                                                                                          
3.14159265358                                                                                         
3.141592653589                                                                                        
3.1415926535897                                                                                       
3.14159265358979                                                                                      
3.141592653589793                                                                                     
3.1415926535897932                                                                                    
3.14159265358979323                                                                                   
3.141592653589793238                                                                                  
3.1415926535897932384                                                                                 
3.14159265358979323846                                                                                
3.141592653589793238462                                                                               
3.1415926535897932384626                                                                              
3.14159265358979323846264                                                                             
3.141592653589793238462643                                                                            
3.1415926535897932384626433                                                                           
3.14159265358979323846264338                                                                          
3.141592653589793238462643383                                                                         
3.1415926535897932384626433832                                                                        
3.14159265358979323846264338327                                                                       
3.141592653589793238462643383279                                                                      
3.1415926535897932384626433832795                                                                     
3.14159265358979323846264338327950                                                                    
3.141592653589793238462643383279502                                                                   
3.1415926535897932384626433832795028                                                                  
3.14159265358979323846264338327950288                                                                 
3.141592653589793238462643383279502884                                                                
3.1415926535897932384626433832795028841                                                               
3.14159265358979323846264338327950288419                                                              
3.141592653589793238462643383279502884197                                                             
3.1415926535897932384626433832795028841971                                                            
3.14159265358979323846264338327950288419716                                                           
3.141592653589793238462643383279502884197169                                                          
3.1415926535897932384626433832795028841971693                                                         
3.14159265358979323846264338327950288419716939                                                        
3.141592653589793238462643383279502884197169399                                                       
3.1415926535897932384626433832795028841971693993                                                      
3.14159265358979323846264338327950288419716939937                                                     
3.141592653589793238462643383279502884197169399375                                                    
3.1415926535897932384626433832795028841971693993751                                                   
3.14159265358979323846264338327950288419716939937510                                                  
3.141592653589793238462643383279502884197169399375105                                                 
3.1415926535897932384626433832795028841971693993751058                                                
3.14159265358979323846264338327950288419716939937510582                                               
3.141592653589793238462643383279502884197169399375105820                                              
3.1415926535897932384626433832795028841971693993751058209                                             
3.14159265358979323846264338327950288419716939937510582097                                            
3.141592653589793238462643383279502884197169399375105820974                                           
3.1415926535897932384626433832795028841971693993751058209749                                          
3.14159265358979323846264338327950288419716939937510582097494                                         
3.141592653589793238462643383279502884197169399375105820974944                                        
3.1415926535897932384626433832795028841971693993751058209749445                                       
3.14159265358979323846264338327950288419716939937510582097494459                                      
3.141592653589793238462643383279502884197169399375105820974944592                                     
3.1415926535897932384626433832795028841971693993751058209749445923                                    
3.14159265358979323846264338327950288419716939937510582097494459230                                   
3.141592653589793238462643383279502884197169399375105820974944592307                                  
3.1415926535897932384626433832795028841971693993751058209749445923078                                 
3.14159265358979323846264338327950288419716939937510582097494459230781                                
3.141592653589793238462643383279502884197169399375105820974944592307816                               
3.1415926535897932384626433832795028841971693993751058209749445923078164                              
3.14159265358979323846264338327950288419716939937510582097494459230781640                             
3.141592653589793238462643383279502884197169399375105820974944592307816406                            
3.1415926535897932384626433832795028841971693993751058209749445923078164062                           
3.14159265358979323846264338327950288419716939937510582097494459230781640628                          
3.141592653589793238462643383279502884197169399375105820974944592307816406286                         
3.1415926535897932384626433832795028841971693993751058209749445923078164062862                        
3.14159265358979323846264338327950288419716939937510582097494459230781640628620                       
3.141592653589793238462643383279502884197169399375105820974944592307816406286208                      
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089                     
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899                    
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998                   
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986                  
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862                 
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628                
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280               
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803              
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034             
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348            
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482           
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825          
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253         
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534        
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342       
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421      
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211     
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117    
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170   
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706  
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067 
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

व्याख्या

पहले रेंज बनायें [0, n ], n = 5 के लिए दिखाया गया है

   i. >: 5
0 1 2 3 4 5

प्रत्येक को 8 से गुणा करें

   (*&8) i. >: 5
0 8 16 24 32 40

[1, 4, 5, 6]8 के साथ और उत्पादों के बीच की अतिरिक्त तालिका बनाएँ

   (1 4 5 6+/*&8) i. >: 5
1  9 17 25 33 41
4 12 20 28 36 44
5 13 21 29 37 45
6 14 22 30 38 46

प्रत्येक पंक्ति को विभाजित करें [4, 2, -1, 1]

   (4 2 _1 1%1 4 5 6+/*&8) i. >: 5
       4   0.444444  0.235294       0.16  0.121212   0.097561
     0.5   0.166667       0.1  0.0714286 0.0555556  0.0454545
    _0.2 _0.0769231 _0.047619 _0.0344828 _0.027027 _0.0222222
0.166667  0.0714286 0.0454545  0.0333333 0.0263158  0.0217391

फिर घटाव का उपयोग करके नीचे से ऊपर तक कॉलम को कम करें

   ([:-/4 2 _1 1%1 4 5 6+/*&8) i. >: 5
3.13333 0.129426 0.0422205 0.0207553 0.0123137 0.00814508

प्रत्येक 16 k को k [0, n ] में प्रत्येक परिणाम के लिए विभाजित करें

   (16&^%~[:-/4 2 _1 1%1 4 5 6+/*&8) i. >: 5
3.13333 0.00808913 0.000164924 5.06722e_6 1.87893e_7 7.76775e_9

संचयी रकम खोजें

   ([:+/\16&^%~[:-/4 2 _1 1%1 4 5 6+/*&8) i. >: 5
3.13333 3.14142 3.14159 3.14159 3.14159 3.14159

कंप्यूट 10 कश्मीर के लिए कश्मीर में [0, एन ] और गुणा यह प्रत्येक के साथ

   (10&^(*)[:+/\16&^%~[:-/4 2 _1 1%1 4 5 6+/*&8) i. >: 5
3.13333 31.4142 314.159 3141.59 31415.9 314159

फिर प्रत्येक उत्पादों को फर्श करें

   (10&^(<.@*)[:+/\16&^%~[:-/4 2 _1 1%1 4 5 6+/*&8) i. >: 5
3 31 314 3141 31415 314159

परिणाम प्राप्त करने के लिए इसे 10 की समान शक्ति से विभाजित करें

   (10&^(<.@*%[)[:+/\16&^%~[:-/4 2 _1 1%1 4 5 6+/*&8) i. >: 5
3 3.1 3.14 3.141 3.1415 3.14159

Nicee! खुशी है कि किसी ने बहुपद सरलीकरण का उपयोग किया।
मैजिक ऑक्टोपस Urn

@carusocomputing दुर्भाग्य से मैं सिर्फ कॉलम-वार के लिए मानों की एक तालिका का निर्माण करके गुणांक का उपयोग करके छोटा हो गया
मील

फिर भी, दोनों कार्यान्वयन पर अच्छी तरह से किया गया।
मैजिक ऑक्टोपस Urn

3

PARI / GP, 86 बाइट्स

n->for(k=p=0,n,printf("%."k"f\n",(p=16*p-4/(3-j=8*k+4)-2/j-1/j++-1/j++)\(8/5)^k/10^k))

या 69 बाइट्स में दशमलव बिंदु के बिना :

n->for(k=p=0,n,print((p=16*p-4/(3-j=8*k+4)-2/j-1/j++-1/j++)\(8/5)^k))

प्रत्येक पुनरावृत्ति को 16 k से विभाजित करने के बजाय , p के पिछले मूल्य को 16 से गुणा किया जाता है । की मंजिल पी ÷ (8/5) कश्मीर तो का मूल्य है π अंकों की सही संख्या को छोटा कर दिया।

नमूना उपयोग

$ gp
? n->for(k=p=0,n,printf("%."k"f\n",(p=16*p-4/(3-j=8*k+4)-2/j-1/j++-1/j++)\(8/5)^k/10^k))
? %(20)
3
3.1
3.14
3.141
3.1415
3.14159
3.141592
3.1415926
3.14159265
3.141592653
3.1415926535
3.14159265358
3.141592653589
3.1415926535897
3.14159265358979
3.141592653589793
3.1415926535897932
3.14159265358979323
3.141592653589793238
3.1415926535897932384
3.14159265358979323846

3

सी जीसीसी, 118 बाइट्स

golfed:

main(){double k,a,s=1,t;k=a=0;while(k<15){t=k++*8;a+=(4/(t+1)-2/(t+4)-1/(t+5)-1/(t+6))/s;s*=16;printf("%.15lf\n",a);}}

Ungolfed:

main(){
    double k,a,s=1,t;
    k=a=0;
    while(k<15){
        t=k++*8;
        a+=(4/(t+1)-2/(t+4)-1/(t+5)-1/(t+6))/s;
        s*=16;
        printf("%.15lf\n",a);
    }
}

N को बदलने के लिए, बस जबकि (k <15) को बदलकर to (k <n) करें

उत्पादन:

$ gcc pigolf.c -o pigolf
some gcc screaming warnings
$ ./pigolf 
3.133333333333333
3.141422466422466
3.141587390346582
3.141592457567436
3.141592645460336
3.141592653228088
3.141592653572881
3.141592653588973
3.141592653589752
3.141592653589791
3.141592653589793
3.141592653589793
3.141592653589793
3.141592653589793
3.141592653589793

अधिकतम परिशुद्धता 15 दशमलव स्थान है, मैं gmp के साथ किसी भी मूल्य तक बढ़ सकता है, लेकिन शायद अगले पीआई दिन: पी

सुंदर प्रिंट के साथ, 143 बाइट्स

golfed:

main(){double k,a,s=1,t;char o[19];k=a=0;while(k<15){t=k++*8;a+=(4/(t+1)-2/(t+4)-1/(t+5)-1/(t+6))/s;s*=16;snprintf(o,k+3,"%.15lf",a);puts(o);}}

Ungolfed:

main(){
    double k,a,s=1,t;
    char o[19];
    k=a=0;
    while(k<15){
        t=k++*8;
        a+=(4/(t+1)-2/(t+4)-1/(t+5)-1/(t+6))/s;
        s*=16;
        snprintf(o,k+3,"%.15lf",a);
        puts(o);
    }
}

उत्पादन:

$ gcc pigolf_pretty.c -o pigolf_pretty
more gcc screaming warnings
$ ./pigolf_pretty
3.1
3.14
3.141
3.1415
3.14159
3.141592
3.1415926
3.14159265
3.141592653
3.1415926535
3.14159265358
3.141592653589
3.1415926535897
3.14159265358979
3.141592653589793

1
साइट पर आपका स्वागत है! यह एक अच्छा पहला उत्तर है :)
DJMcMayhem

के पास कोष्ठक आवश्यक नहीं होगा
RosLuP

साभार @RosLuP :)
llpinokio


@ceilingcat ++ एक कथन के अंदर कई बार C (और C संकलक) के लिए होगा, अपरिभाषित व्यवहार
RosLuP

2

आईबीएम / लोटस नोट्स फॉर्मूला, 125 बाइट्स

p:=0;@For(n:=0;n<=a;n:=n+1;b:=8*n;p:=p+@Power(16;-n)*(4/(b+1)-2/(b+4)-1/(b+5)-1/(b+6));o:=o:@Left(@Text(p);n+@If(n=0;1;2)));o

एक अन्य क्षेत्र के साथ एक संगणित क्षेत्र में फॉर्मूला जिसे इनपुट के लिए "ए" कहा जाता है।

मूल रूप से पायथन के @shebang से एल्गोरिथ्म का एक पोर्ट जवाब है। 15 अंकों तक की गणना करता है जिसके बाद भाषा की एक सीमा (आउटपुट देखें) के कारण यह छोटा हो जाता है। सिर्फ छुटकारा पाने के लिए @ आईएफ बयान के साथ 12 बाइट बर्बाद करना पड़ा। शुरुआत में 3 के बाद: - /

नमूना आउटपुट

Ungolfed

p:=0;
@For(n:=0; n<=a; n:=n+1;
 b:=8*n;
 p:=p+@Power(16;-n)*(4/(b+1)-2/(b+4)-1/(b+5)-1/(b+6));
 o:=o:@Left(@Text(p);n+@If(n=0;1;2))
 );
o

लेकिन फिर नोट्स फॉर्मूला कभी भी गोल्फ की भाषा नहीं बनने वाला है। प्रेरणा के लिए @Shebang को धन्यवाद।
एलपीड्रो

0

सी #, 183 बाइट्स

golfed:

void F(int n){double s=0;for(int k=0;k<=n;k++){s+=1/Math.Pow(16,k)*(4.0/(8*k+1)-2.0/(8*k+4)-1.0/(8*k+5)-1.0/(8*k+6));double p=Math.Pow(10,k);Console.WriteLine(Math.Truncate(s*p)/p);}}

Ungolfed:

void F(int n)
{
    double s = 0;

    for (int k = 0; k <= n; k++)
    {
        s += 1/Math.Pow(16, k)*(4.0/(8*k + 1) - 2.0/(8*k + 4) - 1.0/(8*k + 5) - 1.0/(8*k + 6));
        double p = Math.Pow(10, k);

        Console.WriteLine(Math.Truncate(s*p)/p);
    }
}

क्या नहीं इस प्रिंट 3.14159265358979किसी के लिए n >= 14डबल परिशुद्धता के कारण?
एमिगा

हां, लेकिन मुझे वर्कअराउंड का कोई पता नहीं है।
पलदिर

गणना करते समय और फिर स्ट्रिंग के रूप में आउटपुट को स्वरूपित करते समय आप बिगइंटर लाइब्रेरी का उपयोग कर सकते हैं।
एमिगा

0

एपीएल (एनएआरएस), 206 चार्ट, 412 बाइट्स

fdn←{1∧÷⍵}⋄fnm←{1∧⍵}⋄r2fs←{q←⌈-/10x⍟¨(fdn ⍵),fnm ⍵⋄m←⎕ct⋄⎕ct←0⋄a←⌊⍵×10x*⍺⋄⎕ct←m⋄k←≢b←⍕a⋄0≥k-⍺:'0.',((⍺-k)⍴'0'),b⋄((k-⍺)↑b),'.',(k-⍺)↓b}⋄p←{+/¨{k←1+8×⍵⋄(+/4 2 1 1÷k,-k+3..5)÷16*⍵}¨¨{0..⍵}¨0..⍵}⋄q←{⍪⍵r2fs¨p⍵}

यह बड़े परिमेय में सभी परिक्षेपण का पता लगाता है, एक फ़ंक्शन का उपयोग करने से जो संख्यात्मक में बड़ी परिमेयता को परिवर्तित करता है ... परीक्षण:

 q 1x
3.1 
3.1 
  q 2x
3.13 
3.14 
3.14 
  q 3x
3.133 
3.141 
3.141 
3.141 
  q 10x
3.1333333333 
3.1414224664 
3.1415873903 
3.1415924575 
3.1415926454 
3.1415926532 
3.1415926535 
3.1415926535 
3.1415926535 
3.1415926535 
3.1415926535 
  q 20x
3.13333333333333333333 
3.14142246642246642246 
3.14158739034658152305 
3.14159245756743538183 
3.14159264546033631955 
3.14159265322808753473 
3.14159265357288082778 
3.14159265358897270494 
3.14159265358975227523 
3.14159265358979114638 
3.14159265358979312961 
3.14159265358979323271 
3.14159265358979323815 
3.14159265358979323844 
3.14159265358979323846 
3.14159265358979323846 
3.14159265358979323846 
3.14159265358979323846 
3.14159265358979323846 
3.14159265358979323846 
3.14159265358979323846 
  q 57x     
3.133333333333333333333333333333333333333333333333333333333 
3.141422466422466422466422466422466422466422466422466422466 
3.141587390346581523052111287405405052463875993287757993640 
3.141592457567435381837004555057293394007389950594818748976 
3.141592645460336319557021222442381831727406617979907186696 
3.141592653228087534734378035536204469558528012197801934814 
3.141592653572880827785240761895898484239065603786606461624 
3.141592653588972704940777767170189446971120489811822860633 
3.141592653589752275236177868398102225795024633409061087027 
3.141592653589791146388776965910347414779015888488996772587 
3.141592653589793129614170564041344858816452676296281615895 
3.141592653589793232711292261930077163422606275435901151635 
3.141592653589793238154766322501863827762609260414389714560 
3.141592653589793238445977501940281666096938425156252904675 
3.141592653589793238461732482037982486800056278143046732780 
3.141592653589793238462593174670682882792683045699610435502 
3.141592653589793238462640595138128445061235672871301070791 
3.141592653589793238462643227424822458237094279625505676929 
3.141592653589793238462643374515761485970237552267559842751 
3.141592653589793238462643382784091514246623611329334708720 
3.141592653589793238462643383251362615881909316518417908555 
3.141592653589793238462643383277897474896408560218644955706 
3.141592653589793238462643383279410929692483875831459799593 
3.141592653589793238462643383279497597978087353533999465917 
3.141592653589793238462643383279502579284902684600486947911 
3.141592653589793238462643383279502866555094658758532859204 
3.141592653589793238462643383279502883173477103651067488504 
3.141592653589793238462643383279502884137610730938143080855 
3.141592653589793238462643383279502884193695667358321264063 
3.141592653589793238462643383279502884196966326705909950134 
3.141592653589793238462643383279502884197157502154596455091 
3.141592653589793238462643383279502884197168700950456888403 
3.141592653589793238462643383279502884197169358296080453391 
3.141592653589793238462643383279502884197169396954642664355 
3.141592653589793238462643383279502884197169399232246022950 
3.141592653589793238462643383279502884197169399366660542801 
3.141592653589793238462643383279502884197169399374605817825 
3.141592653589793238462643383279502884197169399375076175949 
3.141592653589793238462643383279502884197169399375104060947 
3.141592653589793238462643383279502884197169399375105716347 
3.141592653589793238462643383279502884197169399375105814747 
3.141592653589793238462643383279502884197169399375105820603 
3.141592653589793238462643383279502884197169399375105820952 
3.141592653589793238462643383279502884197169399375105820973 
3.141592653589793238462643383279502884197169399375105820974 
3.141592653589793238462643383279502884197169399375105820974 
3.141592653589793238462643383279502884197169399375105820974 
3.141592653589793238462643383279502884197169399375105820974 
3.141592653589793238462643383279502884197169399375105820974 
3.141592653589793238462643383279502884197169399375105820974 
3.141592653589793238462643383279502884197169399375105820974 
3.141592653589793238462643383279502884197169399375105820974 
3.141592653589793238462643383279502884197169399375105820974 
3.141592653589793238462643383279502884197169399375105820974 
3.141592653589793238462643383279502884197169399375105820974 
3.141592653589793238462643383279502884197169399375105820974 
3.141592653589793238462643383279502884197169399375105820974 
3.141592653589793238462643383279502884197169399375105820974 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.