Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ matherr(3M) — A/UX 2.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought




matherr(3M) matherr(3M)
NAME matherr - error-handling function SYNOPSIS #include <math.h> int matherr(x) struct exception *x; DESCRIPTION matherr is invoked by functions in the Math Library when er- rors are detected. Users may define their own procedures for handling errors, by including a function named matherr in their programs. matherr 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; double arg2; double retval; }; The element type is an integer describing the type of error that has occurred, from the following list of constants (de- fined 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 in- voked. retval is set to the default value that will be re- turned by the function unless the user's matherr sets it to a different value. If the user's matherr function returns nonzero, 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 in- volved, will be invoked upon error. These procedures are also summarized in the table below. In every case, errno is April, 1990 1



matherr(3M) matherr(3M)
set to EDOM or ERANGE and the program continues. EXAMPLES #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 */ } 2 April, 1990



matherr(3M) matherr(3M)
DEFAULT ERROR HANDLING PROCEDURES
_______________________________________________________________
| Types of Errors
_______________________________________________________________
|
type DOMAIN|SING O
|
VERFLOW U
|
NDERFLOW T
|
LOSS P
|
LOSS
____________________|__________________________________________
| | | | |
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 | - | - | - | -
____________________|__________________________________________
| | | | |
POW: | - - +H 0 - -
| | | | |
neg ** nonint M
|
, 0 - - - - -
| | | | |
0 ** nonpos |
__________________________|_____|________|_________|_____|_____
|
SQRT: M, 0 | - | - | - | - | -
____________________|__________________________________________
| | | | |
GAMMA: | - M, H H - - -
__________________________|_____|________|_________|_____|_____
|
HYPOT: - | - | H | - | - | -
____________________|__________________________________________
| | | | |
SINH: | - - +H - - -
__________________________|_____|________|_________|_____|_____
|
COSH: - | - | H | - | - | -
____________________|__________________________________________
| | | | |
SIN, COS, TAN: | - - - - M, 0 *
__________________________|_____|________|_________|_____|_____
|
ASIN, ACOS, ATAN2: |M, 0 | - | - | - | - | -
_____________________________________________________
| ABBREVIATIONS |
| * As much as possible of the value is returned. |
| M Message is printed (EDOM error). |
| H HUGE is returned. |
| -H -HUGE is returned. |
| +H HUGE or -HUGE is returned. |
| 0 0 is returned. |
|____________________________________________________|
April, 1990 3

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026