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.