SETMATHERR()

Sets the math error correction status and mode

Syntax

SETMATHERR ([<nStatus>] [,<[@]nMode>]) -> nOldStatus

Arguments

[<nStatus>] new math error correction status [<[@]nMode>] new math error correction mode OR placeholder for current mode (if passed by reference)

Returns

nOldStatus old (if nStatus is a valid value, see below) or current mode of math error correction

Description

Most math functions within the CT3 library (and in Harbour itself) rely on the standard C math library which, on some platforms, calls a certain, user-definable error handling routine when one of the following mathematical errors occur (constants defined in cterror.ch):

CT_ERROR_MATHLIB unknown math lib error CT_ERROR_MATHLIB_DOMAIN a domain error has occured, such as sqrt (-1) CT_ERROR_MATHLIB_SING a singularity will result, such as pow (0, -2) CT_ERROR_MATHLIB_OVERFLOW an overflow will result, such as pow (10, 100) CT_ERROR_MATHLIB_UNDERFLOW an underflow will result, such as pow (10, -100) CT_ERROR_MATHLIB_TLOSS total loss of significance will result, such as exp (1000) CT_ERROR_MATHLIB_PLOSS partial loss of significance will result, such as sin (10e70)

The CT3 library redirects these errors within its math routines to its own math handler. The behaviour of this handler depends on the values of <nStatus> and <nMode>:

The values of <nStatus> and <nOldStatus> specify whether the CT3 math handler is active. It can be one of the following values (defined in ct.ch):

CT_MATHERR_STATUS_NOTFOUND math handler is not installed CT_MATHERR_STATUS_INACTIVE math handler is installed but inactive CT_MATHERR_STATUS_ACTIVE math handler is installed and active

Be aware that, if CT_MATHERR_STATUS_NOTFOUND is used as argument, SETMATHERR() will NOT deinstall the math handler. The math handler is installed by CTINIT(), remains inactive at first, and is deinstalled by CTEXIT().

The value of <nMode> specifies the behaviour of the CT3 math handler if it is installed and active. It can be one of the following values:

CT_MATHERR_MODE_NONE no correction at all, program will exit CT_MATHERR_MODE_DEFAULT default return value will be used, no error msgs ! CT_MATHERR_MODE_USER error will be thrown to user who is responsible for error correction CT_MATHERR_MODE_USERDEFAULT error will be thrown, but if user fails, default correction will be used

The default behaviour is CT_MATHERR_MODE_DEFAULT.

Be aware that, if <nMode> is passed by reference, SETMATHERR() will store the current value in <@nMode> rather than setting a new one.

Status

Ready

Compliance

SETMATHERR() is a new function in Harbour's CT3 library.

Platforms

All

Files

Source is ctmath.c, library is ct3.

See Also