M.Nさんへのお返事です。
> Spigot algorithms を用いて
> SIN(20)の値などをたとえば10000桁求めることなどできるのでしょうか。
順に求まる下位桁からの「桁上り」(1桁にならない場合のこと)を考慮すればできると思います。
以下は、その心配がない範囲の改修です。
!テイラー展開より
! e^x=1+x/1!+x^2/2!+x^3/3!+x^4/4!+x^5/5!+ …
! sin(x)= x/1! -x^3/3! +x^5/5! …
!
!xのべき乗の係数A(i)を比較すると、
! e^xは、1,1,1, 1,1,1,…
! sin(x)は、0,1,0,-1,0,1,…
!
!計算手順
! e^x=((((( … +1)*x/5+1)*x/4+1)*x/3+1)*x/2+1)*x/1+1
!x=1、すなわちsin(1)なら
LET x=1
LET N=15
DIM A(0 TO N) !長さn+1の配列Aを0,1,-1に初期化します。
FOR i=0 TO N
IF MOD(i,2)=1 THEN LET A(i)=(-1)^INT(i/2)
NEXT i
FOR k=1 TO N-1 !そして、次をn-1回繰り返します。
!!!MAT PRINT A; !trace
MAT A=10*A !(a) Aの各要素に10を掛けます。
FOR i=N TO 1 STEP -1 !(b) 右から始めて、
LET Q=INT(A(i)*x/i) !Aの第i要素をiを法として導き、
LET A(i)=A(i)-Q*i/x
LET A(i-1)=A(i-1)+Q !割り算の商を左隣の桁へ持って行きます。
NEXT i
PRINT Q !作り出された最後の商がeの次の桁の数になります。
LET A(0)=0 !※累積されるので、オーバーフローとなる。これを防ぐ!
NEXT k
PRINT SIN(x) !検算
END