MATHLIB.DEF 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. (* Release 3.10 *)
  2. (*-------------------------------------------------------------------------*
  3. * *
  4. * MATHLIB.DEF - Modula-2 MATH library *
  5. * *
  6. * COPYRIGHT (C) 1987..1992 Clarion Software Corporation. *
  7. * All Rights Reserved *
  8. * *
  9. *--------------------------------------------------------------------------*)
  10. (*# call(o_a_copy => on,
  11. o_a_size => on) *)
  12. (*%F _fdata *)
  13. (*# call(seg_name => null) *)
  14. (*# data(seg_name => null) *)
  15. (*%E *)
  16. (*# module(implementation=>off,init_code=>off) *)
  17. DEFINITION MODULE MATHLIB;
  18. IMPORT SYSTEM, CoreMath, Lib;
  19. (* Implemented in Core Library
  20. PROCEDURE Sin (A : LONGREAL) : LONGREAL;
  21. PROCEDURE Cos (A : LONGREAL) : LONGREAL;
  22. PROCEDURE Tan (A : LONGREAL) : LONGREAL;
  23. PROCEDURE SinH(A : LONGREAL) : LONGREAL;
  24. PROCEDURE CosH(A : LONGREAL) : LONGREAL;
  25. PROCEDURE TanH(A : LONGREAL) : LONGREAL;
  26. PROCEDURE ASin(A : LONGREAL) : LONGREAL;
  27. PROCEDURE ACos(A : LONGREAL) : LONGREAL;
  28. PROCEDURE ATan(A : LONGREAL) : LONGREAL;
  29. PROCEDURE Exp (A : LONGREAL) : LONGREAL;
  30. PROCEDURE Log (A : LONGREAL) : LONGREAL;
  31. PROCEDURE Log10(A : LONGREAL) : LONGREAL;
  32. PROCEDURE Pow(X,Y : LONGREAL) : LONGREAL;
  33. PROCEDURE Mod(X,Y : LONGREAL) : LONGREAL;
  34. PROCEDURE Sqrt(A : LONGREAL) : LONGREAL;
  35. *)
  36. PROCEDURE Rexp(VAR I : INTEGER;A : LONGREAL) : LONGREAL;
  37. PROCEDURE ATan2(X,Y : LONGREAL) : LONGREAL;
  38. CONST
  39. Sin = CoreMath.sin;
  40. Cos = CoreMath.cos;
  41. Tan = CoreMath.tan;
  42. SinH = CoreMath.sinh;
  43. CosH = CoreMath.cosh;
  44. TanH = CoreMath.tanh;
  45. ASin = CoreMath.asin;
  46. ACos = CoreMath.acos;
  47. ATan = CoreMath.atan;
  48. Exp = CoreMath.exp;
  49. Log = CoreMath.log;
  50. Log10 = CoreMath.log10;
  51. Pow = CoreMath.pow;
  52. Mod = CoreMath.fmod;
  53. Sqrt = CoreMath.sqrt;
  54. (* 8087 instructions *)
  55. TYPE
  56. PackedBcd = ARRAY[0..9] OF SHORTCARD;
  57. Environment = RECORD
  58. ControlWord : BITSET;
  59. StatusWord : BITSET;
  60. TagWord : BITSET;
  61. IP : CARDINAL;
  62. Opcode : CARDINAL;
  63. DataPointer : CARDINAL;
  64. R80287 : CARDINAL;
  65. END;
  66. PROCEDURE LongToBcd(A: LONGREAL) : PackedBcd;
  67. PROCEDURE BcdToLong(A: PackedBcd) : LONGREAL;
  68. PROCEDURE IntPow(X:LONGREAL;K:INTEGER):LONGREAL;
  69. (*# save *)
  70. (*# call(reg_param => (ax,bx,cx,dx,st0), reg_saved => (ds,si,di,st1,st2)) *)
  71. PROCEDURE LoadControlWord(C : BITSET);
  72. PROCEDURE StoreControlWord() : BITSET;
  73. PROCEDURE ClearExceptions();
  74. PROCEDURE StoreEnvironment(VAR En: Environment);
  75. (*# restore *)
  76. (* end of 8087 instructions *)
  77. (*
  78. TYPE
  79. StrPtr = POINTER TO ARRAY [0..15] OF CHAR;
  80. Exception = RECORD
  81. type: CARDINAL;
  82. Name: StrPtr;
  83. arg1, arg2, retval: LONGREAL;
  84. END;
  85. VAR
  86. MathError : PROCEDURE (VAR E: Exception): INTEGER;
  87. *)
  88. (* Values for error type parameter to MathError procedure *)
  89. CONST
  90. DOMAIN = 1; (* parameter not in valid domain *)
  91. SING = 2; (* function is incalculable at this place *)
  92. OVERFLOW = 3; (* result exceeds representable range *)
  93. UNDERFLOW = 4; (* result too close to zero to be represented *)
  94. TLOSS = 5; (* total loss of precision (eg. Sine (2**65)) *)
  95. PLOSS = 6; (* partial precision loss *)
  96. (* Math Constants *)
  97. CONST
  98. M_E = 2.718281828459045240; (* e *)
  99. M_Log2E = 1.442695040888963410; (* log2 of e *)
  100. M_Log10E = 0.434294481903251828; (* log10 of e *)
  101. M_Ln2 = 0.693147180559945309; (* log2 of 2 *)
  102. M_Ln10 = 2.302585092994045680; (* log2 of 10 *)
  103. M_Pi = 3.141592653589793240; (* Pi *)
  104. M_PiBy2 = 1.570796326794896620; (* Pi/2 *)
  105. M_PiBy4 = 0.785398163397448310; (* Pi/4 *)
  106. M_1ByPy = 0.318309886183790672; (* 1/Pi *)
  107. M_2ByPy = 0.636619772367581343; (* 2/Pi *)
  108. M_1BySqrtPi = 0.564189583547756287; (* 1/sqrt(Pi) *)
  109. M_2BySqrtPi = 1.128379167095512570; (* 2/sqrt(Pi) *)
  110. M_Sqrt2 = 1.414213562373095050; (* Sqrt(2) *)
  111. M_Sqrt2By2 = 0.707106781186547524; (* Sqrt(2)/2 *)
  112. CONST
  113. Exception ::= CoreMath.Exception;
  114. StrPtr ::= CoreMath.StrPtr;
  115. MathError ::= CoreMath.matherr;
  116. END MATHLIB.