MATHERR(3M) DOMAIN/IX SYS5 MATHERR(3M)
NAME
matherr - error-handling function
USAGE
#include <math.h>
int matherr (x)
struct exception *x;
DESCRIPTION
Matherr is invoked by functions in the Math Library when
errors are detected. Users may define their own procedures
for handling errors, by including a function named matherr
in their programs. This matherr function must be of the
form described above. When an error occurs, a pointer to
the exception structure x will be passed to the user-
supplied matherr function. This structure, which is defined
in the <math.h> header file, is as follows:
struct exception {
int type;
char *name;
double arg1, arg2, retval;
};
The element type is an integer describing the type of error
that has occurred. It is taken from the following list of
constants (defined in the header file):
DOMAIN argument domain error
SING argument singularity
OVERFLOW overflow range error
UNDERFLOW underflow range error
TLOSS total loss of significance
PLOSS partial loss of significance
The element name points to a string containing the name of
the function that incurred the error. The variables arg1
and arg2 are the arguments with which the function was
invoked. Retval is set to the default value that will be
returned by the function if the user's matherr does not set
it to a different value.
Printed 12/4/86 MATHERR-1
MATHERR(3M) DOMAIN/IX SYS5 MATHERR(3M)
If the user's matherr function returns non-zero, no error
message will be printed, and errno will not be set.
If matherr is not supplied by the user, the default error-
handling procedures, described with the math functions
involved, will be invoked upon error. These procedures are
also summarized in the table below. In every case, errno is
set to EDOM or ERANGE and the program continues.
EXAMPLE
#include <math.h>
int
matherr(x)
register struct exception *x;
{
switch (x->type) {
case DOMAIN:
/* change sqrt to return sqrt(-arg1), not 0 */
if (!strcmp(x->name, "sqrt")) {
x->retval = sqrt(-x->arg1);
return (0); /* print message and set errno */
}
case SING:
/* all other domain or sing errors, print message and abort */
fprintf(stderr, "domain error in %s\n", x->name);
abort( );
case PLOSS:
/* print detailed error message */
fprintf(stderr, "loss of significance in %s(%g) = %g\n",
x->name, x->arg1, x->retval);
return (1); /* take no other action */
}
return (0); /* all other errors, execute default procedure */
}
DEFAULT ERROR HANDLING PROCEDURES
__________________________________________________________________
_____________________________________Types_of_Errors______________
type DOMAIN SING OVERFLOW UNDERFLOW TLOSS PLOSS
__________________________________________________________________
_________errno__________EDOM__EDOM__ERANGE____ERANGE__ERANGEERANGE
BESSEL: - - - - M, 0 *
y0, y1, yn (arg < 0) M, -H - - - - -
__________________________________________________________________
EXP:_____________________-_____-_______H________0_______-_____-___
LOG, LOG10:
(arg < 0) M, -H - - - - -
(arg = 0) - M, -H - - - -
MATHERR-2 Printed 12/4/86
MATHERR(3M) DOMAIN/IX SYS5 MATHERR(3M)
__________________________________________________________________
POW: - - +H 0 - -
neg ** non-int M, 0 - - - - -
__0_**_non-pos____________________________________________________
SQRT: M, 0 - - - - -
__________________________________________________________________
GAMMA:___________________-____M,_H_____H________-_______-_____-___
HYPOT: - - H - - -
__________________________________________________________________
SINH:____________________-_____-______+H________-_______-_____-___
COSH: - - H - - -
__________________________________________________________________
SIN,_COS,_TAN:_-_________-_____-_______-_______M,_0_____*_________
ASIN, ACOS, ATAN2: M, 0 - - - - -
| | | | | |
| | | | | |
_________________|_____|_____|________|_________|____ |
| | ABBR
|EVIATI
|ONS | | | |
| * As much as|possib
|le of|the value
| is return
|ed.| |
| M Message is|printe
|d (EDO
|M error).
| | | |
| H HUGE is ret
|urned.
| | | | | |
| -H -HUGE is re
|turned
|. | | | | |
| +H HUGE or -HU
|GE is|return
|ed. | | | |
|__0____0_is_return
|ed.__|_____|________|_________|___| |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | |
Printed 12/4/86 MATHERR-3