home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Monster Media 1994 #1
/
monster.zip
/
monster
/
PROG_PAS
/
TRIG.ZIP
/
TRIG1.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-01-19
|
5KB
|
282 lines
LIBRARY TRIG1;
USES WINTYPES,WINPROCS;
FUNCTION ARCCOS(C,DEFAULT:EXTENDED):EXTENDED;EXPORT;
VAR
S,F:EXTENDED;
BEGIN
{-1=<input<=1, 0=<output<=pi};
IF (ABS(C)>1) THEN
BEGIN
ARCCOS:=DEFAULT;
END
ELSE
BEGIN
IF (C=0) THEN
BEGIN
ARCCOS:=PI/2;
END
ELSE
BEGIN
IF ((ABS(C))=1) THEN
BEGIN
S:=0;
F:=ARCTAN(S/C);
END
ELSE
BEGIN
S:=SQRT(1-SQR(C));
F:=ARCTAN(S/ABS(C));
END;
IF (C<0) THEN
BEGIN
ARCCOS:=PI-F;
END
ELSE
BEGIN
ARCCOS:=F;
END;
END;
END;
END;
FUNCTION ARCSIN(S,DEFAULT:EXTENDED):EXTENDED;EXPORT;
VAR
C,F:EXTENDED;
BEGIN
{-1=<input<=1, -pi/2=<output<=pi/2};
IF (ABS(S)>1) THEN
BEGIN
ARCSIN:=DEFAULT;
END
ELSE
BEGIN
IF ((ABS(S))=1) THEN
BEGIN
ARCSIN:=(INT(S/(ABS(S))))*PI/2;
END
ELSE
BEGIN
C:=SQRT(1-SQR(S));
F:=ARCTAN(S/(ABS(C)));
ARCSIN:=F;
END;
END;
END;
FUNCTION TAN(THETA,LIMIT:EXTENDED):EXTENDED;EXPORT;
BEGIN
{-inf=<input<=inf, -inf=<output<=inf};
IF (COS(THETA)=0) THEN
BEGIN
IF (SIN(THETA)>=0) THEN
BEGIN
TAN:=LIMIT;
END
ELSE
BEGIN
TAN:=-LIMIT;
END;
END
ELSE
BEGIN
TAN:=(SIN(THETA))/(COS(THETA));
END;
END;
FUNCTION SINH(U:EXTENDED):EXTENDED;EXPORT;
BEGIN
{-inf=<input<=inf, -inf=<output<=inf};
SINH:=(1/2)*(EXP(U)-EXP(-U));
END;
FUNCTION COSH(U:EXTENDED):EXTENDED;EXPORT;
BEGIN
{-inf=<input<=inf, +1=<output<=inf};
COSH:=(1/2)*(EXP(U)+EXP(-U));
END;
FUNCTION TANH(U:EXTENDED):EXTENDED;EXPORT;
BEGIN
{-inf=<input<=inf, -1<output<1};
TANH:=(EXP(U)-EXP(-U))/(EXP(U)+EXP(-U));
END;
FUNCTION COTH(U,DEFAULT:EXTENDED):EXTENDED;EXPORT;
BEGIN
{all input except 0, (-inf=<output<-1)and(1<output<=inf)};
IF (U=0) THEN
COTH:=DEFAULT
ELSE
COTH:=(EXP(U)+EXP(-U))/(EXP(U)-EXP(-U));
END;
FUNCTION SECH(U:EXTENDED):EXTENDED;EXPORT;
BEGIN
{-inf=<input<=inf, 0<output<=1};
SECH:=2/(EXP(U)+EXP(-U));
END;
FUNCTION CSCH(U,DEFAULT:EXTENDED):EXTENDED;EXPORT;
BEGIN
{all input except 0, all output except 0};
IF (U=0) THEN
CSCH:=DEFAULT
ELSE
CSCH:=2/(EXP(U)-EXP(-U));
END;
FUNCTION ARCTANH(U,DEFAULT:EXTENDED):EXTENDED;EXPORT;
BEGIN
{-1<input<1, -inf=<output<=inf};
IF (ABS(U)>=1) THEN
ARCTANH:=DEFAULT
ELSE
ARCTANH:=(1/2)*LN((1+U)/(1-U));
END;
FUNCTION ARCCOSH(U,DEFAULT:EXTENDED):EXTENDED;EXPORT;
VAR
S8:EXTENDED;
BEGIN
{input>=1, output>=0};
IF (U<1) THEN
BEGIN
ARCCOSH:=DEFAULT;
END
ELSE
BEGIN
S8:=SQRT(SQR(U)-1);
ARCCOSH:=ARCTANH(S8/U,0);
END;
END;
FUNCTION ARCSINH(U:EXTENDED):EXTENDED;EXPORT;
VAR
C8:EXTENDED;
BEGIN
{-inf=<input<=inf, -inf=<output<=inf};
C8:=SQRT(1+SQR(U));
ARCSINH:=ARCTANH(U/C8,0);
END;
FUNCTION ARCCSCH(U,DEFAULT:EXTENDED):EXTENDED;EXPORT;
VAR
S8,C8:EXTENDED;
BEGIN
{all input except 0, all output except 0};
IF (U=0) THEN
BEGIN
ARCCSCH:=DEFAULT;
END
ELSE
BEGIN
S8:=1/U;
C8:=SQRT(SQR(S8)+1);
ARCCSCH:=ARCTANH(S8/C8,0);
END;
END;
FUNCTION ARCSECH(U,DEFAULT:EXTENDED):EXTENDED;EXPORT;
VAR
S8,C8:EXTENDED;
BEGIN
{0<input<=1, 0=<output<=inf};
IF ((U<=0)OR(U>1)) THEN
BEGIN
ARCSECH:=DEFAULT;
END
ELSE
BEGIN
C8:=1/U;
S8:=SQRT(SQR(C8)-1);
ARCSECH:=ARCTANH(S8/C8,0);
END;
END;
FUNCTION ARCCOTH(U,DEFAULT:EXTENDED):EXTENDED;EXPORT;
BEGIN
{(-inf=<input<-1)and(1<input<=inf), all output except 0};
IF (ABS(U)<=1) THEN
ARCCOTH:=DEFAULT
ELSE
ARCCOTH:=ARCTANH(1/U,0);
END;
FUNCTION SEC(U,DEFAULT:EXTENDED):EXTENDED;EXPORT;
BEGIN
{-inf=<input<=inf, (-inf=<output<=-1)and(1=<output<=inf)};
IF (COS(U)=0) THEN
SEC:=DEFAULT
ELSE
SEC:=1/(COS(U));
END;
FUNCTION CSC(U,DEFAULT:EXTENDED):EXTENDED;EXPORT;
BEGIN
{-inf=<input<=inf, (-inf=<output<=-1)and(1=<output<=inf)};
IF (SIN(U)=0) THEN
CSC:=DEFAULT
ELSE
CSC:=1/(SIN(U));
END;
FUNCTION COT(U,DEFAULT:EXTENDED):EXTENDED;EXPORT;
BEGIN
{-inf=<input<=inf, -inf=<output<=inf};
IF (SIN(U)=0) THEN
COT:=DEFAULT
ELSE
COT:=(COS(U))/(SIN(U));
END;
FUNCTION ARCSEC(U,DEFAULT:EXTENDED):EXTENDED;EXPORT;
BEGIN
{(-inf=<input<=-1)and(1=<input<=inf),0=<output<=pi};
IF ((ABS(U))<1) THEN
ARCSEC:=DEFAULT
ELSE
ARCSEC:=ARCCOS(1/U,DEFAULT);
END;
FUNCTION ARCCSC(U,DEFAULT:EXTENDED):EXTENDED;EXPORT;
BEGIN
{(-inf=<input<=-1)and(1=<input<=inf), -pi/2=<output<=pi/2};
IF ((ABS(U))<1) THEN
ARCCSC:=DEFAULT
ELSE
ARCCSC:=ARCSIN(1/U,DEFAULT);
END;
FUNCTION ARCCOT(U:EXTENDED):EXTENDED;EXPORT;
BEGIN
{-inf=<input<=inf, 0=<output<=pi};
ARCCOT:=(PI/2)-ARCTAN(U);
END;
EXPORTS ARCCOS INDEX 1;
EXPORTS ARCSIN INDEX 2;
EXPORTS TAN INDEX 3;
EXPORTS SINH INDEX 4;
EXPORTS COSH INDEX 5;
EXPORTS TANH INDEX 6;
EXPORTS COTH INDEX 7;
EXPORTS SECH INDEX 8;
EXPORTS CSCH INDEX 9;
EXPORTS ARCTANH INDEX 10;
EXPORTS ARCCOSH INDEX 11;
EXPORTS ARCSINH INDEX 12;
EXPORTS ARCCSCH INDEX 13;
EXPORTS ARCSECH INDEX 14;
EXPORTS ARCCOTH INDEX 15;
EXPORTS SEC INDEX 16;
EXPORTS CSC INDEX 17;
EXPORTS COT INDEX 18;
EXPORTS ARCSEC INDEX 19;
EXPORTS ARCCSC INDEX 20;
EXPORTS ARCCOT INDEX 21;
BEGIN
END.