공리, 174 바이트
f(n:PI):Complex Float==(n>10^4=>%i;m:=digits(n+10);e:=10^(-n-7);a:=0;repeat(b:=a+(cos(a)-a)/(sin(a)+1.);if a~=0 and a-b<e then break;a:=b);a:=floor(b*10^n)/10.^n;digits(m);a)
ungolfed 및 댓글
-- Input: n:PI numero di cifre
-- Output la soluzione x a cos(x)=x con n cifre significative dopo la virgola
-- Usa il metodo di Newton a_0:=a a_(n+1)=a_n-f(a_n)/f'(a_n)
fo(n:PI):Complex Float==
n>10^4=>%i
m:=digits(n+10)
e:=10^(-n-7)
a:=0 -- Punto iniziale
repeat
b:=a+(cos(a)-a)/(sin(a)+1.)
if a~=0 and a-b<e then break
a:=b
a:=floor(b*10^n)/10.^n
digits(m)
a
결과 :
(3) -> for i in 1..10 repeat output[i,f(i)]
[1.0,0.7]
[2.0,0.73]
[3.0,0.739]
[4.0,0.739]
[5.0,0.73908]
[6.0,0.739085]
[7.0,0.7390851]
[8.0,0.73908513]
[9.0,0.739085133]
[10.0,0.7390851332]
Type: Void
Time: 0.12 (IN) + 0.10 (EV) + 0.12 (OT) + 0.02 (GC) = 0.35 sec
(4) -> f 300
(4)
0.7390851332 1516064165 5312087673 8734040134 1175890075 7464965680 635773284
6 5488354759 4599376106 9317665318 4980124664 3987163027 7149036913 084203157
8 0440574620 7786885249 0389153928 9438845095 2348013356 3127677223 158095635
3 7765724512 0437341993 6433512538 4097800343 4064670047 9402143478 080271801
8 8377113613 8204206631
Type: Complex Float
Time: 0.03 (IN) + 0.07 (OT) = 0.10 sec
Newton 방법은 'repeated cos (x) 방법'보다 빠르기 때문에 사용합니다.
800 92x
1000 153x
2000 379x
첫 번째 열에는 자릿수가 있고 두 번째 열에는 반복되는 cos (x) 방법을 사용하는 것보다 Newton 방법이 얼마나 빠릅니다. 좋은 아침
Decimal
.