Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ matherr(3M) — sys5 — Apollo Domain/IX SR9.5

Media Vault

Software Library

Restoration Projects

Artifacts Sought



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

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