Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

MATHERR(3M)                          BSD                           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 errors 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.  It is taken from 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 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 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__|ERANGE_|ERANGE_|
|_______________________|_______|_______|__________|__________|_______|_______|
|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_**_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|  -    |  -    |    -     |    -     |  -    |       |
|_______________________|_______|_______|__________|__________|_______|_______|
     _____________________________________________________
     |                   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.                                |
     |____________________________________________________|

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