SIN(X) a COS(X)

SIN(X) pro reálnou hodnotu X (v radiánech) určíme jako součet řady

X-X**3/FACT(3))+(X**5/FACT(5))-X**7/FACT(7))+...

, kde FACT je funkce pro výpočet faktoriálu. Podobně COS(X) určíme jako součet řady

1-(X**2/FACT(2))+(X**4/FACT(4))-X**6/FACT(6))+...

Při výpočtu můžeme s výhodou užít následující vzorce pro urychlení konvergence řady:

SIN(-X)=-SIN(X)SIN(2*Pi+X)=SIN(X)
COS(-X) =COS(X)COS(2*Pi+X)=COS(X)
 
pro X z (Pi,2*Pi)
pro X z (Pi/2,Pi)
SIN(Pi+X)=-SIN(X)SIN(X)=SIN(Pi-X)
COS(Pi+X)=-COS(X)COS(X)=-COS(Pi-X)

 

IMPLEMENTACE
Jednotka: vnitřní funkce nebo vnější funkce, ale pak bez příkazu procedure
 
Vazba: PICONST pro P<=200, pro P>200 můžeme použít funkci PI
 
Parametry: číslo X (radiány), přirozené číslo P - počet platných číslic výsledku, implicitně 9
 
Vrací: hodnotu SIN(X) nebo COS(X)
 

SIN: procedure
parse arg X, P
if P = "" then P = 9; numeric digits P
Pi = PICONST(); Signum = 1
if X < 0 then do; Signum = -1; X = -X; end
Pim2 = Pi * 2; X = X // Pim2; Pid2 = Pi / 2
if X > Pi
  then do; X = X - Pi; Signum = -Signum; end
if X > Pid2 then X = Pi - X
Term = X; Xsup2 = X * X; Sum = X; F = 1
do J = 3 by 2
  Term = -Term * Xsup2 / (J * (J - 1))
  NewSum = Sum + Term
  if NewSum = Sum then return Signum * Sum
  Sum = NewSum
end

 

 

COS: procedure
parse arg X, P
if P = "" then P = 9; numeric digits P
Pi = PICONST(); Signum = 1; X = ABS(X)
Pim2 = Pi * 2; X = X // Pim2; Pid2 = Pi / 2
if X > Pi
  then do; X = X - Pi; Signum = -Signum; end
if X > Pid2
  then do; X = Pi - X; Signum = -Signum; end
Term = 1; Xsup2 = X * X; Sum = 1; F = 1
do J = 2 by 2
  Term = -Term * Xsup2 / (J * (J - 1))
  NewSum = Sum + Term
  if NewSum = Sum then return Signum * Sum
  Sum = NewSum
end

 

SOUVISLOSTI

Literatura
Wirth N., Systematisches Programmieren
- 2nd ed. B.G Teubner, Stuttgart, 1975


Obálka Obsah Index Hlavní stránka

změněno 1. srpna 2001
Copyright © 2000-2001 Vladimír Zábrodský, RNDr.