home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / turbom2 / m2trig-2.lbr / LONGTRIG.MZD / LONGTRIG.MOD
Text File  |  1987-08-23  |  3KB  |  151 lines

  1. IMPLEMENTATION MODULE LongTrig;
  2.  
  3. (* Jim Lill 16 Aug 87 *)
  4.  
  5. FROM LongMath IMPORT Arctan, ArgumentError, Cos, Sin, Sqrt, Exp, Ln;
  6.  
  7. CONST D0 = 0.0D0;
  8.  
  9. VAR
  10.   A, Kdr, Result : LONGREAL;
  11.  
  12. PROCEDURE Rad(x:LONGREAL): LONGREAL;
  13.  
  14. BEGIN
  15.   Result := x * Kdr;
  16.   RETURN Result;
  17. END Rad;
  18.  
  19. PROCEDURE Deg(x:LONGREAL): LONGREAL;
  20.  
  21. BEGIN
  22.   Result := x/Kdr;
  23.   RETURN Result;
  24. END Deg;
  25.  
  26. PROCEDURE Tan(x:LONGREAL): LONGREAL;
  27.  
  28. BEGIN
  29.   A := Cos(x);
  30.   IF A=D0 THEN
  31.     Result := MAX(LONGREAL)
  32.   ELSE
  33.     Result := Sin(x)/A
  34.   END;
  35.   RETURN Result;
  36. END Tan;
  37.  
  38. PROCEDURE Cotan(x:LONGREAL): LONGREAL;
  39.  
  40. BEGIN
  41.   A := Sin(x);
  42.   IF A = D0 THEN
  43.     Result := MAX(LONGREAL)
  44.   ELSE
  45.     Result := Cos(x)/A
  46.   END;
  47.   RETURN Result;
  48. END Cotan;
  49.  
  50. PROCEDURE Arcsin(x:LONGREAL): LONGREAL;
  51.  
  52. BEGIN
  53.   IF x=D0 THEN
  54.     Result:=D0
  55.   ELSIF x=1.0D0 THEN
  56.     Result:=PI / 2.0D0
  57.   ELSIF x=-1.0D0 THEN
  58.     Result:=-PI / 2.0D0
  59.   ELSIF ABS(x) > 1.0D0 THEN 
  60.     RAISE ArgumentError
  61.   ELSE
  62.     Result := Arctan(x/Sqrt(-x*x+1.0D0))
  63.   END;
  64.   RETURN Result;
  65. END Arcsin;
  66.  
  67. PROCEDURE Arccos(x:LONGREAL): LONGREAL;
  68.  
  69. BEGIN
  70.   IF x=D0 THEN
  71.     Result:=PI / 2.0D0
  72.   ELSIF x=1.0D0 THEN
  73.     Result:=D0
  74.   ELSIF x=-1.0D0 THEN
  75.     Result:=PI
  76.   ELSIF ABS(x) > 1.0D0 THEN
  77.     RAISE ArgumentError
  78.   ELSE
  79.     Result := -Arctan(x/Sqrt(-x*x+1.0D0))+PI / 2.0D0
  80.   END;
  81.   RETURN Result;
  82. END Arccos;
  83.  
  84. PROCEDURE Arctan2(x,y:LONGREAL):LONGREAL;
  85.  
  86. BEGIN
  87.   IF x=D0 THEN
  88.     IF
  89.     y=D0 THEN
  90.       Result:=D0
  91.     ELSE
  92.       IF y>D0 THEN
  93.     Result:=PI / 2.0D0
  94.       ELSE
  95.     Result:= 3.0D0 * PI / 2.0D0
  96.       END
  97.     END
  98.   ELSIF y=D0 THEN
  99.     IF x>D0 THEN
  100.       Result:=D0
  101.     ELSE
  102.     Result:=PI
  103.     END
  104.   ELSE
  105.       A:=Arctan(y/x);
  106.       IF x>D0 THEN
  107.     Result:=A
  108.       ELSE
  109.         Result:=A + PI
  110.     END
  111.   END;
  112.   RETURN Result;
  113. END Arctan2;
  114.  
  115. PROCEDURE Cosh(x:LONGREAL):LONGREAL;
  116.  
  117. BEGIN
  118.   Result:= (Exp(x) + Exp(-x))/2.0D0;
  119.   RETURN Result;
  120. END Cosh;
  121.  
  122. PROCEDURE Sinh(x:LONGREAL):LONGREAL;
  123.  
  124. BEGIN
  125.   Result:= (Exp(x) - Exp(-x))/2.0D0;
  126.   RETURN Result;
  127. END Sinh;
  128.  
  129. PROCEDURE Tanh(x:LONGREAL):LONGREAL;
  130.  
  131. BEGIN
  132.   Result:= (Exp(x) - Exp(-x))/(Exp(x) + Exp(-x));
  133.   RETURN Result;
  134. END Tanh;
  135.  
  136. PROCEDURE Log(x:LONGREAL):LONGREAL;
  137.  
  138. BEGIN
  139.   IF x < D0 THEN RAISE ArgumentError
  140.   ELSE  
  141.     Result:= Ln(x)/Ln(1.0D0);
  142.     RETURN Result;
  143.   END;
  144. END Log;
  145.  
  146. BEGIN  (* Initialization Code *)
  147.  
  148.   PI:= 4.0D0 * Arctan(1.0D0);
  149.   Kdr:= PI / 18.0D1;
  150.  
  151. END LongTrig.