타원의 둘레

Sep 29 2020

도전

원의 원주 ( \$2\pi r\$), 타원 의 원주는 단단 합니다.

준 장축 \$a\$및 반 단축 \$b\$ 타원 (Wikipedia의 아래 이미지 참조)의 둘레를 계산합니다.

정의에 따라 \$0 < b \le a\$입력 값. 출력 값은 \ 이내 여야합니다.$10^{-6}\$ 주어진 테스트 케이스에 대한 예상 답변의 상대 오류.

표준 코드 골프 규칙이 적용됩니다. 바이트 단위의 가장 짧은 코드가 이깁니다.

방식

관련 정보는 Wikipedia 및 MathWorld 에서 찾을 수 있습니다 . \$C\$원주의 값입니다. \$e\$및 \$h\$도우미 값입니다. 마지막 두 개는 Ramanujan의 근사치이며, 첫 번째 (줄이 그어진 것)는 오류 요구 사항을 충족하지 않습니다. 제 근사 식 (식 5)을 거의 (않는 검증 최대 용) \$a=5b\$ (테스트 케이스의 상한이기도하므로 답변에 사용할 수 있습니다).

$$ \require{enclose} \\ \begin{align} e &= \sqrt{1-\frac{b^2}{a^2}} \\ C &= 4aE(e) = 4a\int^{\pi/2}_{0}{\sqrt{1-e^2 \sin^2 \theta} \;d\theta} \tag{1} \\ C &= 2 \pi a \left(1-\sum^{\infty}_{n=1}{\left(\frac{(2n-1)!!}{(2n)!!}\right)^2 \frac{e^{2n}}{2n-1}}\right) \tag{2} \\ h &= \frac{(a-b)^2}{(a+b)^2} \\ C &= \pi (a + b) \left( 1 + \sum^{\infty}_{n=1} { \left( \frac{(2n-1)!!}{2^n n!} \right)^2 \frac{h^n}{(2n-1)^2} } \right) \tag{3} \\ C &= \pi (a + b) \sum^{\infty}_{n=0} { \binom{1/2}{n}^2 h^n } \tag{4} \\ \enclose{horizontalstrike}{C} &\enclose{horizontalstrike}{\approx \pi \left( 3(a+b) - \sqrt{(3a+b)(a+3b)} \right)} \\ C &\approx \pi (a+b) \left( 1+ \frac{3h}{10 + \sqrt{4-3h}} \right) \tag{5} \end{align} $$

테스트 케이스

C (원주)에 대한 모든 값은 1000 개의 항을 포함하는 방정식 4를 사용하여 계산되며 10 개의 유효 숫자로 표시됩니다.

a     b     C
1     1     6.283185307
1.2   1     6.925791195
1.5   1     7.932719795
2     1     9.688448220
3     1     13.36489322
5     1     21.01004454
20    10    96.88448220
123   45    556.6359936

답변

13 J42161217 Sep 29 2020 at 12:39

Wolfram 언어 (Mathematica) , 20 바이트

Perimeter[#~Disk~#]&

온라인으로 시도하십시오!

@Roman에서 -2 바이트 (댓글 참조)

12 AndersKaseorg Sep 29 2020 at 16:06

Python 3 , 68 67 바이트

f=lambda a,b,k=2:k>>9or(1-b*b/a/a)*(k-4+3/k)/k*f(a,b,k+2)+6.28319*a

온라인으로 시도하십시오!

\의 충분히 정확한 값이 주어진 정확한 무한 급수$2\pi \approx 6.28319\$및 \$\infty \approx 9\$.

69 68 바이트

f=lambda a,b,k=0:k//7*.785398*a*(8-k)or f(a+b,2*(a*b)**.5,k*b/a/2+4)

온라인으로 시도하십시오!

\의 충분히 정확한 값이 주어진 다른 정확한 시리즈$\frac\pi4 \approx .785398\$및 \$8 \approx 7\$. 이것은 각 테스트 케이스에 대해 5 개의 재귀 호출을 사용하여 매우 빠르게 수렴합니다! 재귀는 불변 값을 정확하게 보존합니다.

$$\left(1 + \frac{kb}{8a}\right)C(a, b) - \frac{kb}{8a}C(a + b, 2\sqrt{a b}),$$

그러면 대략 \$(1 - \frac k8)2\pi a\$때 \$a, b\$ 충분히 가까워집니다.

8 ovs Sep 29 2020 at 15:06

APL (Dyalog Unicode) , 28 25 23 바이트

-5 바이트에 대한 Bubbler 에게 감사드립니다 !

가정 ⎕IO←0합니다.

f←○1⊥+×9(×⍨*×.5!⍨⊢)∘⍳⍨-÷+

온라인으로 시도하십시오!

이것은 계산

$$ \pi \cdot \sum_{n=0}^{8} (a+b) \cdot \left( h^{\prime n} \binom{1/2}{n} \right) ^2 \qquad h^\prime = {{a-b}\over{a+b}} $$

이것은 4 번째 공식을 사용한 충분히 근사치입니다. 설명을 위해 기능은 두 개로 나뉩니다. f주 함수이며 \를g 계산합니다.$ \left( \alpha^{\prime n} \binom{1/2}{n} \right) ^2 \$에 대한 \$n\$에서 \$0\$에 \$\omega-1\$:

g ← (×⍨*×.5!⍨⊢)∘⍳
f ← ○1⊥+×9g⍨-÷+

a f b오른쪽에서 시작 :

-÷+\ 계산$h^\prime = (a-b)÷(a+b)\$.
g⍨되고 g감형 => 9 g⍨ h' ≡ h' g 9. \g 의 9 개 값으로 구성된 벡터를 반환합니다.$\left( h^{\prime n} \binom{1/2}{n} \right) ^2\$.
+×곱하기 \$a + b\$이 벡터에.
1⊥결과 벡터를 base 1에서 변환합니다. 이는 벡터를 합산하는 것과 같습니다.
○결과 숫자에 \를 곱합니다.$\pi\$.

지금 h' g 9:

⍳와 인덱스 생성한다 ⎕IO←0, ⍳9벡터의 결과 0 1 ... 8.
나머지 기차 ×⍨*×.5!⍨⊢는 이제 \$h^\prime\$왼쪽 인수와 벡터 \$v = (0,1, \cdots, 8)\$ 올바른 주장으로 :

.5!⍨⊢벡터로 불리는 감형 이항 계수 v의 오른쪽에는 \$0.5\$왼쪽에. 이것은 \$\binom{1/2}{n}\$모든 \$n \in v\$.
*×이 벡터를 요소별로 \를 곱합니다.$h^\prime * n\$( \$*\$지수를 나타냄).
×⍨오른쪽 인수 만 주어진 정류 곱셈은 이것을 왼쪽 및 오른쪽 인수로 사용하는 것처럼 보이는가? 벡터를 요소별로 제곱합니다.

8 DominicvanEssen Sep 29 2020 at 14:56

R , 60 57 바이트

function(a,b,c=a+b,h=3*(a-b)^2/c)pi*(c+h/(10+(4-h/c)^.5))

온라인으로 시도하십시오!

Ramanujan의 2 차 근사 (eq 5)를 간단하게 구현합니다.

슬프게도이 근사치는 주석에 의해 유발 된보다 흥미로운 다른 접근 방식 보다 훨씬 간결 합니다. 큰 타원을 '그리고'그 가장자리 주변을 측정합니다 (불행히도 실제 픽셀을 세는 것은 작동하지 않을 것입니다. ..) :

R , 90 65 62 바이트

편집 : abs복소수의 값을 사용하여 빗변 길이를 계산하여 -3 바이트

function(a,b,n=1e5)sum(4*abs(diff(b*(1-(0:n/n)^2)^.5)+1i*a/n))

온라인으로 시도하십시오!

어떻게? (고립되지 않은 코드) :

circumference_of_ellipse=
function(a,b                # a,b = axes of ellipse
n=1e6){                     # n = number of pixels to 'draw' across 'a' axis
x=a*0:n/n                   # x coordinates = n pixels from 0 to a
y=b*(1-(x/a)^2)^.5)         # y coordinates = to satisfy (x/a)^2 + (y/b)^2 =1
                            # we could actually draw the (quarter) ellipse here
                            # with 'plot(x,y)'
step_y=diff(y)              # step_y = change in y for each step of x
step_x=a/n                  # step_x = size of each step of x
h=(step_y^2+step_x^2)^.5    # h=hypotenuse of triangle formed by step_y & step_x
sum(4*h)                    # sum all the hypotenuses and multiply by 4
                            # (since we only 'drew' a quarter of the ellipse)
6 640KB Oct 01 2020 at 07:56

x87 기계 코드, 65 59 53 바이트

00000000: d9c1 d9c1 dec1 d9ca dee9 d8c8 d9c1 d8c8  ................
00000010: def9 6a03 8bf4 de0c ff04 df04 d9c1 dee9  ..j.............
00000020: d9fa 8304 06de 04de f9d9 e8de c1d9 ebde  ................
00000030: c9de c95e c3                             ...^.

목록 :

D9 C1       FLD   ST(1)             ; load a to ST
D9 C1       FLD   ST(1)             ; load b to ST
DE C1       FADD                    ; a + b
D9 CA       FXCH  ST(2)             ; save result for end 
DE E9       FSUB                    ; a - b 
D8 C8       FMUL  ST(0), ST(0)      ; ST ^ 2 
D9 C1       FLD   ST(1)             ; copy a + b result to ST 
D8 C8       FMUL  ST(0), ST(0)      ; ST ^ 2 
DE F9       FDIV                    ; calculate h 
6A 03       PUSH  3                 ; load const 3 
8B F4       MOV   SI, SP            ; SI to top of CPU stack
DE 0C       FIMUL WORD PTR[SI]      ; ST = h * 3 
FF 04       INC   WORD PTR[SI]      ; 4 = 3 + 1 
DF 04       FILD  WORD PTR[SI]      ; load const 4 
D9 C1       FLD   ST(1)             ; load 3h to ST
DE E9       FSUB                    ; 4 - 3h 
D9 FA       FSQRT                   ; sqrt(ST) 
83 04 06    ADD   WORD PTR[SI], 6   ; 10 = 4 + 6 
DE 04       FIADD WORD PTR[SI]      ; ST + 10 
DE F9       FDIV                    ; 3h / ST 
D9 E8       FLD1                    ; load const 1 
DE C1       FADD                    ; ST + 1 
D9 EB       FLDPI                   ; load PI 
DE C9       FMUL                    ; * PI 
DE C9       FMUL                    ; * ( a + b ) from earlier 
5E          POP   SI                ; restore CPU stack 
C3          RET                     ; return to caller 

호출 함수 입력 a하고 b에서 ST(0)와 ST(1). 에서 출력 ST(0). 전체 하드웨어 80 비트 확장 정밀도에서 Ramanujan의 2 차 근사 (eq 5)를 구현합니다.

테스트 프로그램 :

5 Arnauld Sep 29 2020 at 13:31

JavaScript (ES7),  59  56 바이트

@DominicvanEssen 덕분에 2 바이트 절약

a=>b=>Math.PI*((h=3*(a-b)**2/(a+=b))/(10+(4-h/a)**.5)+a)

온라인으로 시도하십시오!

5 Dingus Sep 29 2020 at 23:08

Ruby , 63 바이트

->a,b,h=1r*(a-b)/a+=b{3.141593*a*((154+53*h*=h)*h*h/1e4+h/4+1)}

온라인으로 시도하십시오!

직접 포트 Arnauld의 @의 자바 스크립트 대답은 짧고 (58 바이트)입니다. 그러나 저는 위의 63-byter가 3 차 다항식이라는 점에서 다른 접근 방식과 다르기 때문에 좋아합니다. 제곱근이없고 무한 급수가 없습니다.

이 훌륭한 리뷰 는 타원의 원주를 근사화하는 거의 40 개의 다른 방법을 나열하고 각 근사치의 상대 오차 그래프를 \ 의 함수로 표시합니다.$b/a\$. 나열된 방법 중 몇이 필요한 허용 오차를 만족시킬 수있는 그래프 쇼의 검사 \$10^{-6}\$모든 테스트 케이스에 대해. 여기에서 여러 답변이 이미 'Ramanujan II'(eq. (5))를 탐색했기 때문에 Padé 근사값 'Padé 3/2'및 'Padé 3/3'을 살펴보기로 결정했습니다.

Padé의 접근 음은 공지 멱급수의 용어의 가장 큰 가능한 수와 일치하도록 선택된 계수와 유리 함수이다. 이 경우 관련 멱급수는 eq에 나타나는 무한 합입니다. (4). 이 시리즈의 Padé 3/2 및 Padé 3/3 근사치는 수학적으로 간단하지만 (위에 링크 된 리뷰 참조) 코딩 골프에는 적합하지 않습니다. 대신, 근사값에 대한 근사값 은 최소 제곱 피팅에 의해 얻어집니다. 코드에 구현 된 결과 3 차 다항식 (절단 된 계수 포함)은 다음과 같습니다.$$ 0.0053h^3 + 0.0154h^2+0.25h+1. $$이 함수는 부분적으로 잘림 및 부분적으로 \의 해당 값만 사용하여 적합이 최적화 되었기 때문에 테스트 케이스에 과적 합되었습니다.$h=(a-b)^2/(a+b)^2\$테스트 케이스에서 발생합니다. (결과적으로 동일한 바이트 수에도 불구하고 \ 위의 상대 오류를 생성하지 않고 Math::PI대신을 대체 할 수 없습니다.3.141593$10^{-6}\$두 테스트 케이스에 대한 임계 값 \$b/a=1/2\$.)

4 GalenIvanov Sep 29 2020 at 18:55

J , 31 30 바이트

-1 바이트 덕분에 Jonah!

[:o.1#.+*i.@9*:@(^~*0.5!~[)-%+

온라인으로 시도하십시오!

본질적으로 @ovs의 APL 솔루션의 J 포트입니다 .

4 Noodle9 Sep 29 2020 at 17:43

C (gcc) , 97 92 91 바이트

Dominic van Essen 덕분에 4 5 바이트 절약 !!! Ceilingcat 덕분에 2 바이트 절약 !!!

float f(a,b,k)float a,b,k;{k=k?:2;k=k>999?1:(1-b*b/a/a)*(k-4+3/k)/k*f(a,b,k+2)+6.283185*a;}

온라인으로 시도하십시오!

Port of Anders Kaseorg 의 Python 답변 .

3 KevinCruijssen Sep 29 2020 at 16:32

MathGolf , 20 바이트

-ëΣ_¬/²3*_4,√♂+/)π**

내 05AB1E 대답의 포트 , 따라서 다섯 번째 수식의 수정도 구현합니다.

온라인으로 시도하십시오.

설명:

-                     # b-a
 ëΣ                   # a+b
   _                  # Duplicate
    ¬                 # Rotate stack: b-a,a+b,a+b → a+b,b-a,a+b
     /                # Divide
      ²               # Square
       3*             # Multiply by 3
         _            # Duplicate
          4,          # Subtract from 4
            √         # Square-root
             ♂+       # Add 10
               /      # Divide
                )     # Increment by 1
                 π*   # Multiply by PI
                   *  # Multiply by the a+b we've duplicated
                      # (after which the entire stack is output implicitly as result)
2 Sisyphus Sep 29 2020 at 12:47

SageMath , 37 바이트

lambda a,b:4*a*elliptic_ec(1-b*b/a/a)

온라인으로 시도하십시오!

타원 적분 공식을 사용합니다.

2 KevinCruijssen Sep 29 2020 at 15:17

05AB1E , 22 21 20 바이트

ÆnIOn/3*D4s-tT+/>IOžqP

다섯 번째 공식을 구현합니다. 쌍으로 입력 \$[a,b]\$.

-1 byte 덕분에 @ovs .

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

Æ                     # Reduce the (implicit) input-pair by subtraction: a-b
 IO                   # Push the input-pair again and sum it: a+b
   /                  # Divide them by one another: (a-b)/(a+b)
    n                 # Square it: ((a-b)/(a+b))²
     3*               # Multiply it by 3: ((a-b)/(a+b))²*3
       D              # Duplicate that
        4α            # Take the absolute difference with 4: |((a-b)/(a+b))²*3-4|
          t           # Take the square-root of that: sqrt(|((a-b)/(a+b))²*3-4|)
           T+         # Add 10: sqrt(|((a-b)/(a+b))²*3-4|)+10
             /        # Divide the duplicate by this:
                      #  (a-b)²/(a+b)²*3/(sqrt(|((a-b)/(a+b))²*3-4|)+10)
              >       # Increase it by 1:
                      #  (a-b)²/(a+b)²*3/(sqrt(|((a-b)/(a+b))²*3-4|)+10)+1
               IO     # Push the input-sum again: a+b
                 žq   # Push PI: 3.141592653589793
                   P  # Take the product of the three values on the stack:
                      #  ((a-b)²/(a+b)²*3/(sqrt(|((a-b)/(a+b))²*3-4|)+10)+1)*(a+b)*π
                      # (after which the result is output implicitly)

나는 \$\left|3h-4\right|\$\ 대신$4-3h\$내 공식에서 바이트를 저장하지만 제약 조건이 주어지면 \$0<b\leq a\$, \$h\$다음과 같습니다. \$0\leq h<1\$, 따라서 \$3h\$최대 \$2.999\dots\$.
나는 또한 \$h=\left(\frac{a-b}{a+b}\right)^2\$\ 대신$h=\frac{(a-b)^2}{(a+b)^2}\$다른 바이트를 저장하려면 ( @ovs 덕분에 ).

2 Razetime Sep 30 2020 at 11:35

APL (Dyalog Extended) , 28 바이트

○+×1+∘(⊢÷10+.5*⍨4-⊢)3×2*⍨-÷+

온라인으로 시도하십시오!

ovs의 기차로의 변환.

APL (Dyalog Extended) , 35 바이트

{h←3×2*⍨⍺(-÷+)⍵⋄(○⍺+⍵)×1+h÷10+√4-h}

온라인으로 시도하십시오!

방정식 4를 사용합니다.

\의 사용이 두 개 이상이기 때문에 다른 APL 답변보다 길다.$h\$.

2 Roman Sep 30 2020 at 03:36

Wolfram 언어 (Mathematica) , 25 24 바이트

4EllipticE[1-(#2/#)^2]#&

온라인으로 시도하십시오!

-1 @AndersKaseorg 덕분에

Mathematica는 타원 적분에 대해 다른 규칙을 사용하므로 제곱근이 사라집니다.

2 LuisMendo Oct 04 2020 at 06:00

MATL , 19 바이트

y/U_Q.5t_hlbZh*YPE*

온라인으로 시도하십시오! 또는 모든 테스트 케이스를 확인하십시오 .

사용 된 공식

이는 챌린지 설명의 공식 (1), \ [C = 4a \ int ^ {\ pi / 2} _ {0} {\ sqrt {1-e ^ 2 \ sin ^ 2 \ theta}; d \를 기반으로합니다. theta} = 4 a \, E (e), \] 여기서 \$e\$편심, \ [e = \ sqrt {1-b ^ 2 / a ^ 2}, \] 및 \$E\$는 IS 두 번째 종류의 완전한 타원 적분 . 이 정수는 표현 될 수 가우스 초기 하 함수 , \${}_2F_1\$, 다음과 같습니다. \ [E (e) = \ tfrac {\ pi} {2} \; {} _ 2F_1 \ left (\ tfrac12,-\ tfrac12; 1; e ^ 2 \ right). \] 위의 조합은 코드에 사용 된 공식을 제공합니다. \ [C = 2 \ pi a \; {} _ 2F_1 \ left (\ tfrac12,-\ tfrac12; 1; 1-b ^ 2 / a ^ 2 \ right) . \]

코드 설명

y       % Implicit inputs: a, b. Duplicate from below
        % STACK: a, b, a
/       % Divide
        % STACK: a, b/a
U_Q     % Square, negate, add 1
        % STACK: a, 1-(b/a)^2
.5t_h   % Push 0.5, duplicate, negate, concatenate
        % STACK: a, 1-(b/a)^2, [0.5, -0.5]
1       % Push 1
        % STACK: a, 1-(b/a)^2, [0.5, -0.5], 1
b       % Bubble up in the stack
        % STACK: a, [0.5, -0.5], 1, 1-(b/a)^2
Zh      % Hypergeometric function, 2F1
        % STACK: a, 2F1([0.5, -0.5], 1, 1-(b/a)^2)
*       % Multiply
        % STACK: a * 2F1([0.5, -0.5], 1, 1-(b/a)^2)
YPE     % Push pi, multiply by 2
        % STACK: a * 2F1([0.5, -0.5], 1, 1-(b/a)^2), 2*pi
*       % Multiply. Implicit display
        % STACK: 2*pi*a * 2F1([0.5, -0.5], 1, 1-(b/a)^2)
2 Neil Oct 06 2020 at 17:48

목탄 , 52 바이트

≧×χφNθNηI×⁴ΣEEφE²∕⁺ιλφ₂⁺××θθ⁻Σι⊗₂Πι××ηη⁻⁻²Σι⊗₂⁻⊕ΠιΣι

온라인으로 시도하십시오! 링크는 자세한 코드 버전입니다. 사분면에 대한 선 적분을 근사하여 작동합니다. 기본 정밀도는 안타깝게도 ~ 5 개의 유효 숫자이므로 정밀도를 ~ 7 유효 숫자로 높이려면 처음 4 바이트가 필요합니다. 동일한 바이트 수에 대해 추가 증가가 가능하지만 TIO에서 시연하기에는 너무 느려집니다. 설명:

≧×χφ

조각 수 증가 \$ n \$사분면을 \$ 1,000 \$에 \$ 10,000 \$. ≧×φφ로 증가 할 것 \$ 1,000,000 \$ 하지만 TIO에게는 너무 느립니다.

NθNη

타원의 축 입력 \$ a \$및 \$ b \$.

I×⁴Σ

사분면을 세분화 한 각 조각의 대략적인 호 길이를 계산 한 후 합계에 \를 곱합니다.$ 4 \$ 전체 타원에 대해 결과를 출력합니다.

EEφE²∕⁺ιλφ

사분면의 조각 목록을 만듭니다. 타원 방정식에서 \$ \left ( \frac x a \right ) ^ 2 + \left ( \frac y b \right ) ^ 2 = 1 \$우리는 \$ \left ( \frac {x_i} a \right ) ^ 2 = \frac i n \$및 \$ \left ( \frac {y_i} b \right ) ^ 2 = 1 - \frac i n \$. 주어진 조각 인덱스 \$ i \$\ 사이의 거리를 계산하고 싶습니다.$ ( x_i, y_i ) \$및 \$ ( x _{i+1}, y_{i+1} ) \$. 각 \$ i \$우리는 \$ j = \frac i n \$및 \$ k = \frac {i+1} n \$ 목록을 반복합니다.

₂⁺××θθ⁻Σι⊗₂Πι××ηη⁻⁻²Σι⊗₂⁻⊕ΠιΣι

거리 \$ \sqrt { ( a \sqrt k - a \sqrt j ) ^ 2 + ( b \sqrt { 1 - j } - b \sqrt { 1 - k } ) ^ 2 } \$\로 확장$ \sqrt { a^2 \left ( j + k - 2 \sqrt { j k } \right ) + b^2 \left ( (1 - j) + (1 - k) - 2 \sqrt { (1 - j) (1 - k) } \right ) } \$확장되는 \$ \sqrt { a^2 \left ( j + k - 2 \sqrt { j k } \right ) + b^2 \left ( 2 - (j + k) - 2 \sqrt { 1 + j k - (j + k) } \right ) } \$.

1 JonathanAllan Sep 30 2020 at 02:46

젤리 , 20 바이트

I÷S²3×÷ạ4½+⁵Ʋ$‘×SרP

한 쌍을 받아들이는 모나 딕 링크 [a, b]는 공식 5의 결과를 산출합니다.

온라인으로 시도하십시오!


나는 포뮬러 4가 갈 길이라고 생각했지만 21 개 밖에 안됐다.

9Ḷ.c×⁹I÷S*⁸¤²ʋ€×ØP×SS

온라인으로 시도하십시오!

1 Pseudonym Oct 01 2020 at 07:33

Haskell, 73 바이트

e a b=(a+b)*pi*(1+3*l/(10+sqrt(4-3*l))+3*l^5/2^17)where l=((a-b)/(a+b))^2

(5)의 개선 된 버전으로 실험 :

$$E(a,b) = \pi (a+b) \left( 1 + \frac{3h^2}{10 + \sqrt{4-3h^2}} + \frac{3h^{10}}{2^{17}}\right)$$

1 PkmnQ Oct 01 2020 at 16:58

Pyth , 40 바이트

A,hQeQJc^-GH2^+GH2**.n0+GHhc*3J+T@-4*3J2

온라인으로 시도하십시오!

여기에있는 대부분의 다른 답변과 마찬가지로 공식 5입니다.

1 KjetilS. Oct 02 2020 at 15:19

Perl 5 , 70 바이트

sub{my$s;map$s+=sqrt+($_[0]*cos)**2+($_[1]*sin)**2,0..1570795;4e-6*$s}

온라인으로 시도하십시오!

Perl 5 , 78 바이트

sub f{($a,$b)=@_;$H=3*(($a-$b)/($a+=$b))**2;3.141593*$a*(1+$H/(10+sqrt 4-$H))}

와 a+=b자바 스크립트 응답에서 도난 트릭.

온라인으로 시도하십시오!

또는 이것은 13 바이트 미만 (그러나 핵심 모듈 List :: Util 사용)

Perl 5 -MList :: Util = sum, 74 65 65 + 16 바이트

sub f{4e-6*sum map sqrt+($_[0]*cos)**2+($_[1]*sin)**2,0..1570795}

온라인으로 시도하십시오!

수식 (1)의 변형을 수치 적으로 계산합니다.

나는 이것이 1570795 ≈ 500000π까지 정수의 sin과 cos로 작동한다는 것에 놀랐습니다. 그러나 "온라인 시도"질문의 테스트에는 상대 오류가 <0.000001입니다. 추측 sin²(the integers)은 충분히 "평균 이상"입니다.

1 JosiahRyanW Nov 03 2020 at 14:35

CJam , 29 바이트

{_:+_P*@:-@d/_*3*_4\-mqA+/)*}

온라인으로 시도하십시오!

1 ZippyMagician Nov 04 2020 at 05:23

Arn , 22 바이트

┴þ5‡Ô縄”R¤ËíÜç›WðÙÝÁ*

시도 해봐! 꽤 좋은 근사치이지만 더 큰 값에 대해서는 정확하지 않습니다. 줄이 그어진 공식을 사용합니다 (나는 무의미하게 제거되었다고 가정합니다). 궁금한 점이 있으면 십자 표가없는 공식을 5에서 33 바이트로 줄일 수 있었지만 단축하는 방법을 알 수 없었습니다 (이보다 정확도가 떨어졌습니다).

설명

포장 풀기 : pi*(3*(+\)-:/(*3+:})*+3*:}

pi                     Variable; first 20 digits of π
  *
    (
          3
        *
          (+\)         Folded sum ([a, b] -> a + b)
      -
        :/             Square root
            (
                  _    Variable; initialized to STDIN; implied
                *
                  3
              +
                  _    Implied
                :}     Tail
            )
          *
              _        Implied
            +
                3
              *
                  _    Implied
                :}
                       Ending parentheses implied
Lyxal Sep 29 2020 at 12:57

Symja , 35 바이트

f=N(4*#1*EllipticE(1-#2*#2/#1/#1))&

온라인으로 시도하십시오!

Symja의 SageMath 답변 포트.

Mukundan314 Sep 29 2020 at 22:26

Japt , 35 바이트

MP*ºH=3*(U-V ²/(U±V)/(A+(4-H/U ¬ +U

시도 해봐