program _Sin_;
uses CRT;
const E=1.0E-20;
var
k,r,rT,key:extended;

function calculate (x2:extended; maxN:integer; fN:extended; currN:integer):extended;
var fNusing:extended;
sign:integer;

begin
fNusing:=fN*(currN*2)*(currN*2+1);
if (currN mod 2) <> 0 then
sign:=1
else
sign:=-1;

if (currN>maxN) then
if fNusing<>0 then
calculate:=sign/fN-sign*x2/fNusing
else
calculate:=sign/fN+x2*calculate(x2,maxN,fNusing,currN+1);
end;

function sinus (x:extended;err:extended):extended;
var n, k:integer;
diff:boolean;
x1, xneed:extended;
lastsin,currsin:extended;
begin
n:=1;
diff:=FALSE;
{if (x>=2*pi) then
begin
if ((x<2*pi) and (x>0)) then
else
begin
k:=round(x/(2*pi));
x1:=2*pi*k;
xneed:=x-x1;
diff:=TRUE;
end;
end;}

if (x<=2*pi) then
begin
if ((x<2*pi) and (x>0)) then
else
begin
k:=round(x/(2*pi));
x1:=2*pi*k;
xneed:=x-x1;
diff:=TRUE;
end;
end;

if (diff=FALSE) then xneed:=x;

lastsin:=xneed*calculate(xneed*xneed,0,1,1);
currsin:=xneed*calculate(xneed*xneed,1,1,1);

while (abs(currsin-lastsin)>err) do
begin
inc(n);
lastsin:=currsin;
currsin:=xneed*calculate(xneed*xneed,n,1,1);
end;

sinus:=currsin;
end;

{-------------------------end recur-----------}
begin
ClrScr;
Writeln('Ygol ');ReadLn(k);
{------------------------------------------------------------}
rT:=sinus(k,E);r:=sin(k);key:=sqr(rT);
{-----------------SIN---------------}
WriteLn('-----------------SIN---------------');
WriteLn('SIN from Teilor = ',rT:1:15);
WriteLn('SIN from Math = ',r:1:15);
WriteLn('Epsilon = ',e:1:15);
WriteLn('Error = ',abs(r-rT):1:15);

rT:=sinus(pi/2-k,E);r:=cos(k);key:=key+sqr(rT);
{-----------------COS---------------}
WriteLn('-----------------COS---------------');
WriteLn('COS from Teilor = ',rT:1:15);
WriteLn('COS from Math = ',r:1:15);
WriteLn('Epsilon = ',e:1:15);
WriteLn('Error = ',abs(r-rT):1:15);
WriteLn('SIN^2 + COS^2 = ',key:7:6);
ReadLn;
end.
Соседние файлы в папке Sin_Cos
  • #
    09.05.2014386 б37cZ1.cfg
  • #
    09.05.20142.35 Кб36cZ1.dpr
  • #
    09.05.20142.34 Кб36CZ1.PAS