(* Release 3.10 *) (*-------------------------------------------------------------------------* * * * MATHLIB.DEF - Modula-2 MATH library * * * * COPYRIGHT (C) 1987..1992 Clarion Software Corporation. * * All Rights Reserved * * * *--------------------------------------------------------------------------*) (*# call(o_a_copy => on, o_a_size => on) *) (*%F _fdata *) (*# call(seg_name => null) *) (*# data(seg_name => null) *) (*%E *) (*# module(implementation=>off,init_code=>off) *) DEFINITION MODULE MATHLIB; IMPORT SYSTEM, CoreMath, Lib; (* Implemented in Core Library PROCEDURE Sin (A : LONGREAL) : LONGREAL; PROCEDURE Cos (A : LONGREAL) : LONGREAL; PROCEDURE Tan (A : LONGREAL) : LONGREAL; PROCEDURE SinH(A : LONGREAL) : LONGREAL; PROCEDURE CosH(A : LONGREAL) : LONGREAL; PROCEDURE TanH(A : LONGREAL) : LONGREAL; PROCEDURE ASin(A : LONGREAL) : LONGREAL; PROCEDURE ACos(A : LONGREAL) : LONGREAL; PROCEDURE ATan(A : LONGREAL) : LONGREAL; PROCEDURE Exp (A : LONGREAL) : LONGREAL; PROCEDURE Log (A : LONGREAL) : LONGREAL; PROCEDURE Log10(A : LONGREAL) : LONGREAL; PROCEDURE Pow(X,Y : LONGREAL) : LONGREAL; PROCEDURE Mod(X,Y : LONGREAL) : LONGREAL; PROCEDURE Sqrt(A : LONGREAL) : LONGREAL; *) PROCEDURE Rexp(VAR I : INTEGER;A : LONGREAL) : LONGREAL; PROCEDURE ATan2(X,Y : LONGREAL) : LONGREAL; CONST Sin = CoreMath.sin; Cos = CoreMath.cos; Tan = CoreMath.tan; SinH = CoreMath.sinh; CosH = CoreMath.cosh; TanH = CoreMath.tanh; ASin = CoreMath.asin; ACos = CoreMath.acos; ATan = CoreMath.atan; Exp = CoreMath.exp; Log = CoreMath.log; Log10 = CoreMath.log10; Pow = CoreMath.pow; Mod = CoreMath.fmod; Sqrt = CoreMath.sqrt; (* 8087 instructions *) TYPE PackedBcd = ARRAY[0..9] OF SHORTCARD; Environment = RECORD ControlWord : BITSET; StatusWord : BITSET; TagWord : BITSET; IP : CARDINAL; Opcode : CARDINAL; DataPointer : CARDINAL; R80287 : CARDINAL; END; PROCEDURE LongToBcd(A: LONGREAL) : PackedBcd; PROCEDURE BcdToLong(A: PackedBcd) : LONGREAL; PROCEDURE IntPow(X:LONGREAL;K:INTEGER):LONGREAL; (*# save *) (*# call(reg_param => (ax,bx,cx,dx,st0), reg_saved => (ds,si,di,st1,st2)) *) PROCEDURE LoadControlWord(C : BITSET); PROCEDURE StoreControlWord() : BITSET; PROCEDURE ClearExceptions(); PROCEDURE StoreEnvironment(VAR En: Environment); (*# restore *) (* end of 8087 instructions *) (* TYPE StrPtr = POINTER TO ARRAY [0..15] OF CHAR; Exception = RECORD type: CARDINAL; Name: StrPtr; arg1, arg2, retval: LONGREAL; END; VAR MathError : PROCEDURE (VAR E: Exception): INTEGER; *) (* Values for error type parameter to MathError procedure *) CONST DOMAIN = 1; (* parameter not in valid domain *) SING = 2; (* function is incalculable at this place *) OVERFLOW = 3; (* result exceeds representable range *) UNDERFLOW = 4; (* result too close to zero to be represented *) TLOSS = 5; (* total loss of precision (eg. Sine (2**65)) *) PLOSS = 6; (* partial precision loss *) (* Math Constants *) CONST M_E = 2.718281828459045240; (* e *) M_Log2E = 1.442695040888963410; (* log2 of e *) M_Log10E = 0.434294481903251828; (* log10 of e *) M_Ln2 = 0.693147180559945309; (* log2 of 2 *) M_Ln10 = 2.302585092994045680; (* log2 of 10 *) M_Pi = 3.141592653589793240; (* Pi *) M_PiBy2 = 1.570796326794896620; (* Pi/2 *) M_PiBy4 = 0.785398163397448310; (* Pi/4 *) M_1ByPy = 0.318309886183790672; (* 1/Pi *) M_2ByPy = 0.636619772367581343; (* 2/Pi *) M_1BySqrtPi = 0.564189583547756287; (* 1/sqrt(Pi) *) M_2BySqrtPi = 1.128379167095512570; (* 2/sqrt(Pi) *) M_Sqrt2 = 1.414213562373095050; (* Sqrt(2) *) M_Sqrt2By2 = 0.707106781186547524; (* Sqrt(2)/2 *) CONST Exception ::= CoreMath.Exception; StrPtr ::= CoreMath.StrPtr; MathError ::= CoreMath.matherr; END MATHLIB.