Baley – Borwein – Plouffe ซ้ำคำซ้ำ


16

Baley – Borwein – Plouffe ซ้ำคำซ้ำ

เราได้เห็นความท้าทายเกี่ยวกับ pi บน PPCG แล้ว แต่ก็ไม่มีสิ่งใดที่กำหนดอัลกอริทึมที่คุณควรใช้เป็นพิเศษ ผมต้องการที่จะเห็นการใช้งานของอัลกอริทึม Bailey-Borwein-Plouffeในภาษาใด ๆ nถึงการทำซ้ำ สูตรมีดังนี้:

แก้ไขสูตรแล้ว

อัลกอริทึมของคุณควรแสดงผลซ้ำแต่ละครั้งจนถึง n โดยแสดงผลรวมกลางรวมทั้งผลลัพธ์สุดท้ายเพื่อสร้าง "piangle" คุณอาจใช้รูปแบบพหุนามที่ลดลงของอัลกอริทึมที่แสดงในหน้าวิกิพีเดีย ตัวอย่างการรันสำหรับ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ที่ถูกส่งผ่านไปยังขั้นตอนวิธีการที่จะบอกว่าแต่ละซ้ำควรคำนวณปี่ขึ้นไปผ่านทั้งหมดnk

กฎ:

  • ไม่อนุญาตให้ใช้บิวด์อินและไม่piต้องใช้สูตร
  • คุณจะต้องสนับสนุนการขึ้นไปสูงสุดที่ภาษาของคุณช่วยในแง่ของการคำนวณที่n 16^nหากการป้อนข้อมูลทำให้เกิดการล้นทางคณิตศาสตร์ในระหว่างการคำนวณหลังจากx<nการประหารชีวิตเพราะภาษาของคุณสนับสนุนทศนิยมเพียงอย่างเดียว2^32-1นี่เป็นเรื่องปกติ สมมติฐานอื่น ๆ บนnไม่ดี
  • คุณต้องให้คำอธิบายว่าคุณได้รับผลลัพธ์อย่างไรหากไม่ชัดเจน ตัวอย่างเช่นหากคุณกำลังโพสต์ในภาษา Golfing จำเป็นต้องมีการแบ่งย่อย 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คุณสามารถปิดบังได้ไม่มากก็น้อย
การใช้งานนี้ทำใน Groovy


5
ข้อเสียเพียงอย่างเดียวที่ฉันเห็นคือมันจะยากที่จะตรวจสอบว่าวิธีการที่คนใช้ soley ตามผลลัพธ์ซึ่งโดยทั่วไปจะมีปัญหากับCalculate foo via x methodความท้าทาย
DJMcMayhem

@DJMcMayhem เพิ่มคำอธิบายของรหัสที่คุณโพสต์เป็นสิ่งจำเป็นหากมันไม่ได้มีการใช้งานที่ชัดเจนเพื่อให้แน่ใจว่าเราสามารถบอกสิ่งที่พวกเขาทำ อัลกอริทึมนั้นค่อนข้างตรงไปตรงมาแม้ว่ามันจะไม่เลวร้ายนัก
Magic Octopus Urn

2
ด้วยความเคารพต่อความคิดเห็น @ DJMcMayhem ให้ดูคำแนะนำในการหลีกเลี่ยงข้อกำหนดของโปรแกรมที่ไม่ได้สังเกต
Peter Taylor

2
คุณต้องรองรับสูงสุดที่ภาษาของคุณอนุญาต อนุญาตได้อย่างไร ฉันสามารถใช้การสอบถามซ้ำได้หรือไม่ ฉันสามารถใช้รายการได้หรือไม่หากเครื่องกำเนิดไฟฟ้าจะเป็นมิตรกับความจำมากกว่า ฉันสามารถใช้ตัวเลข 2n และตัดส่วนสุดท้ายออกได้ไหม
เดนนิส

1
เพื่อความชัดเจนฉันจะลบลำดับก่อนที่ผลลัพธ์ที่จำเป็นจริง ๆ
Dennis

คำตอบ:


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 แสดงผลรวมกลางเช่นเดียวกับผลสุดท้ายในรูปแบบ" piangle "" โดยทั่วไปเพียงดำเนินการนี้จาก 0 ถึง n ผลักแต่ละคนไปที่สแต็คและมันจะดี
Magic Octopus Urn

1
@carusocomputing: อาจจะเปลี่ยนถ้อยคำในการแสดงผลของการทำซ้ำในปัจจุบัน n เป็นตัวเลือกที่ฉันเข้าใจว่าเป็นเพียงผลสุดท้ายเท่านั้นที่จำเป็น
Emigna

หรืออาจเป็นเพียงฉันที่ไม่ดีในการอ่าน (ฉันรู้ว่าฉันมักจะข้ามส่วนเมื่อฉันรู้สึกว่าฉันมีส่วนสำคัญ)
Emigna

4
อาจจะแค่เราแต่แน่นอนไม่เพียงแค่คุณ
เดนนิส

@carusocomputing: เพิ่มการวนซ้ำแล้ว จำเป็นต้องหาวิธีที่ถูกกว่าเพื่อใช้เป็น "." แพงมาก
Emigna


3

Python 2, 174 ไบต์

ชายนี่คือเวลาที่ฉันหวังว่า Python จะมีวิธีที่ง่ายกว่าในการรักษาความแม่นยำที่ไม่มีที่สิ้นสุดสำหรับทศนิยม .. อาจใช้ประเภทความแม่นยำ infite ของคุณเองสำหรับความท้าทายนี้จะสั้นลง แต่ฉันไม่สามารถจินตนาการได้ สูตรถูกเขียนเป็นคำต่อคำ

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

Haskell, 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]]

การใช้งานที่ไม่ซับซ้อน คำนวณnสูงสุด 15 หลัก (ความแม่นยำมาตรฐานสองเท่า)


l<-[8*fromIntegral k]แทนการlet ...บันทึกไบต์
nimi

3

J, 73 64 62 ไบต์

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

สิ่งนี้จะส่งออกแต่ละการประมาณเป็นตัวเลขnในรูปแบบของสตริง นี่ใช้การลดความซับซ้อนของพหุนามของสูตรและรับnแรกตัวเลขโดยการคูณผลรวมด้วยกำลัง 10 การปูพื้นมันและหารด้วยพลังเดียวกันนั้น 10

อินพุตถูกใช้เป็นจำนวนเต็มแบบขยายหมายความว่าจะใช้ rationals เมื่อมีการหารเกิดขึ้นซึ่งจะให้ผลลัพธ์ที่แน่นอน

การใช้

นี่คือเอาต์พุตสำหรับn = 100 ซึ่งแสดงผลรวมสะสมสำหรับkใน [0, 100]

   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 kสำหรับkใน [0, n ] แล้วคูณด้วยแต่ละ

   (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! บางคนดีใจที่ใช้การลดความซับซ้อนพหุนาม
Magic Octopus Urn

@carusocomputing แต่น่าเสียดายที่ฉันได้รับมันสั้นลงโดยใช้ค่าสัมประสิทธิ์โดยการสร้างตารางของค่าเพื่อรวมคอลัมน์ฉลาด
ไมล์

ยังทำอย่างดีในการใช้งานทั้งสอง
Magic Octopus 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แต่ละซ้ำค่าก่อนหน้าคูณแทนจาก16 ชั้นของp ÷ (8/5) kจึงเป็นค่าของπที่ถูกตัดเหลือจำนวนหลักที่ถูกต้อง

ตัวอย่างการใช้งาน

$ 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

C GCC 118 ไบต์

แข็งแรงเล่นกอล์ฟ:

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) เป็นในขณะที่ (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 แต่อาจเป็นวัน pi ถัดไป: P

พิมพ์สวย 143 ไบต์

แข็งแรงเล่นกอล์ฟ:

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 ++ t หลายครั้งภายในหนึ่งข้อความสั่งจะใช้สำหรับ C (และ C คอมไพเลอร์) พฤติกรรมที่ไม่ได้กำหนด
RosLuP

2

สูตร IBM / Lotus Notes ขนาด 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

สูตรในฟิลด์ที่คำนวณด้วยฟิลด์อื่นที่เรียกว่า "a" สำหรับอินพุต

โดยทั่วไปพอร์ตของอัลกอริทึมจากคำตอบของ Python จาก @shebang คำนวณได้สูงสุด 15 หลักหลังจากนั้นจะตัดทอนเนื่องจากข้อ จำกัด ของภาษา (ดูผลลัพธ์) ต้องเสีย 12 ไบต์ด้วยคำสั่ง @If ในตอนท้ายเพื่อกำจัด หลังจาก 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 สำหรับแรงบันดาลใจ
ElPedro

0

C #, 183 ไบต์

แข็งแรงเล่นกอล์ฟ:

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อันเนื่องมาจากความแม่นยำสอง?
Emigna

ใช่ แต่ฉันไม่รู้วิธีแก้ปัญหา
paldir

คุณสามารถใช้ไลบรารี BigInteger เมื่อทำการคำนวณแล้วจัดรูปแบบผลลัพธ์เป็นสตริง
Emigna

0

APL (NARS), 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 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.