INTERFACEArithmetic ;
Arithmetic for Modula-3, see doc for detailsAbstract: Global definitions used by all arithmetic modules.
IMPORT AtomList;
EXCEPTION Error(ErrorRoot);
TYPE
(* Error objects may carry more information than a simple enumeration
value. Especially the LAPACK wrappers may benefit from the extended
facilities. In future we might add a dynamic method to the objects
which generates an error message text or similar services. *)
ErrorRoot = AtomList.T BRANDED OBJECT
METHODS
init (msg: TEXT := ""; oldErr: ErrorRoot := NIL; ):
ErrorRoot := ErrorInit;
END;
ErrorBadParameters = ErrorRoot BRANDED OBJECT END;
ErrorOperationAborted = ErrorRoot BRANDED OBJECT END;
ErrorOutOfRange =
ErrorBadParameters BRANDED OBJECT END; (* parameter is out of range *)
ErrorDivisionByZero =
ErrorBadParameters BRANDED OBJECT END; (* x/0 condition detected *)
ErrorUnitMismatch =
ErrorBadParameters BRANDED OBJECT END; (* physical units of values
didn't meet the requirements
of the operation *)
ErrorNeedMoreData =
ErrorBadParameters BRANDED OBJECT END; (* e.g., more data points in
statistics *)
ErrorOverflow = ErrorOperationAborted BRANDED OBJECT END;
ErrorIndivisible =
ErrorOperationAborted BRANDED OBJECT END; (* division is not possible
in the considered field,
DivMod should always
work *)
ErrorMatrixSingular =
ErrorOperationAborted BRANDED OBJECT END; (* matrix can't be
inverted *)
ErrorAlmostZero =
ErrorOperationAborted BRANDED OBJECT END; (* in tridiagonal, rewrite
for n-1 eqns *)
ErrorNoConvergence =
ErrorOperationAborted BRANDED OBJECT END; (* e.g., eps or maxiter too
small *)
PROCEDURE ErrorInit
(err: ErrorRoot; msg: TEXT := ""; oldErr: ErrorRoot := NIL; ): ErrorRoot;
END Arithmetic.