베일리 – 보 웨인 – 루피 반복


16

베일리 – 보 웨인 – 루피 반복

우리는 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알고리즘에 전달 된 것과 동일해야합니다. 즉, 각 반복이 pi에 대해 전달 n된 모든 것을 계산해야 합니다 k.

규칙 :

  • 내장은 허용되지 않으며 pi수식을 사용해야합니다.
  • n의 계산 측면에서 언어가 허용하는 최대 값까지 지원해야합니다 16^n. x<n언어가 최대 10 진수 만 지원하기 때문에 실행 후 계산 중에 입력에서 산술 오버플로가 발생하는 경우 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, 조금만 끝낼 수도 있습니다.
이 구현은 Groovy에서 수행되었습니다.


5
내가 볼 수있는 유일한 단점은 출력을 기반으로 누군가가 어떻게 대두를 사용하는지 정확하게 확인하기가 어려울 수 있다는 것입니다 Calculate foo via x method.
DJMcMayhem

@DJMcMayhem 명백한 구현이 아닌 경우 게시 한 코드에 대한 설명을 추가하여 실제로 수행 한 작업을 알 수 있습니다. 알고리즘은 실제로 매우 간단하므로 너무 나쁘지 않아야합니다.
Magic Octopus Urn

2
@DJMcMayhem의 의견과 관련하여 관찰수없는 프로그램 요구 사항피하기 위한 조언을 참조하십시오 .
피터 테일러

2
언어가 허용하는 최대 n을 지원해야합니다. 어떻게 할 수 있습니까? 재귀를 사용할 수 있습니까? 생성기가 메모리 친화적 인 경우 목록을 사용할 수 있습니까? 2n 자리를 사용하여 마지막 n을 잘라낼 수 있습니까?
Dennis

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
어쩌면 우리 뿐 일 수도 있지만 확실히 당신 만이 아닙니다 .
Dennis

@carusocomputing : 반복이 추가되었습니다. "."로하는 더 싼 방법을 찾아야합니다. 매우 비쌌습니다.
Emigna

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 바이트

자, 이것은 파이썬이 소수에 대해 무한 정밀도를 유지하는 쉬운 방법을 원했을 때입니다.이 도전에 대한 자신의 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

하스켈, 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의 거듭 제곱으로 나눠서 자리를 .

입력은 확장 정수로 취해집니다. 즉, 나눗셈이 발생할 때 합리적인 결과를 사용하여 결과를 정확하게 유지합니다.

용법

이것은 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

설명

먼저 n = 5에 대해 표시된 범위 [0, n ]을 만드십시오.

   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

니스! 누군가 다항식 단순화를 사용하게되어 기쁩니다.
매직 문어 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 . 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);}}

언 골프 드 :

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을 변경하려면 while (k <15)를 while (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 바이트

골프 :

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);}}

언 골프 드 :

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 2016 년

감사합니다 @RosLuP :)
llpinokio 2016 년


@ceilingcat ++ 하나 개의 문장 안에 여러 번 C (및 C 컴파일러) 정의되지 않은 행동이 될 것입니다 t
RosLuP

2

IBM / Lotus Notes Formula, 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"라는 다른 필드가있는 계산 필드의 수식

기본적으로 파이썬의 알고리즘 포트는 @shebang의 답변입니다. 언어 제한으로 인해 잘린 후 최대 15 자리를 계산합니다 (출력 참조). 마지막에 @If 문을 사용하여 12 바이트를 낭비해야했습니다. 시작시 3 이후 :-/

샘플 출력

언 골프

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

그러나 Notes 공식은 절대 골프 언어가 될 수 없습니다. 영감을 주신 @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);}}

언 골프 드 :

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.