(**************************************************
*
* Add this to your library. Ray Penley wrote
* this when the furnished program had a bug but it
* is still nice to have.
*
* donated Sept,1980
***************************************************)
PROGRAM COSINE_DUMMY;
(*$I+*)
FUNCTION COSINE(X:REAL):REAL;
{+++ COSINE ROUTINE, ANGLE "X" MUST BE IN RADIANS +++}
CONST PI = 3.1415926536;
J = 2;
VAR M,N : INTEGER;
R,S,T,U,V : REAL;
(*
NAME COSINE
ENTRY COSINE
*)
FUNCTION FIX(Y,P: REAL): REAL;
VAR SGN : -1..1;
BEGIN
IF Y>0.0 THEN
SGN := 1
ELSE IF Y=0.0 THEN
SGN := 0
ELSE
SGN := -1;
FIX := SGN * TRUNC(ABS(Y)/P);
END;
(*
COSINE:
*)
BEGIN
R := 0.0;
IF ABS(X)>PI THEN R := FIX(X,PI);
X := X - R * PI;
M := -1;
N := 0;
S := 1.0;
T := 1.0;
U := -X * X;
REPEAT
V := S;
M := M + J; N := N + J;
T := T*U/(M*N) ;
S := S + T;
UNTIL (S = V);
IF (TRUNC(R) MOD J<>0) THEN S := -S;
COSINE := S;
END;
(*$I-*)
begin end.