Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ matherr(3M) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

math(5)

matherr(3M)                                                     matherr(3M)

NAME
     matherr - error-handling function

SYNOPSIS
     cc [flag ...] file ... -lm [library ...]

     #include <math.h>

     int matherr(struct exception *x);

DESCRIPTION
     matherr() is invoked by functions in the math libraries when errors
     are detected. Note that matherr() is not invoked when the -kansi com-
     pilation option is used. Users may define their own procedures for
     handling errors, by including a function named matherr() in their pro-
     grams. 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, arg2, retval;
        };

     The element type is a number of type int describing the type of error
     that has occurred, 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 func-
     tion 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 matherr()
     sets it to a different value.








Page 1                       Reliant UNIX 5.44                Printed 11/98

matherr(3M)                                                     matherr(3M)

     If the 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.














































Page 2                       Reliant UNIX 5.44                Printed 11/98

matherr(3M)                                                     matherr(3M)

__________________________________________________________________________
|                   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, EXPF:           |   -   |  -  |    H    |     0    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|LOG, LOG10:          |       |     |         |          |       |       |
|LOGF, LOG10F:        |       |     |         |          |       |       |
|(arg < 0)            | M, -H |  -  |    -    |     -    |   -   |       |
|(arg = 0)            | M, -H |  -  |    -    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|POW, POWF:           |   -   |  -  |    +H   |     0    |   -   |   -   |
|neg ** non-int       |  M, 0 |  -  |    -    |     -    |   -   |   -   |
|  0 ** non-pos       |  M, 0 |  -  |    -    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|SQRT, SQRTF:         |  M, 0 |  -  |    -    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|FMOD, FMODF:         |       |     |         |          |       |       |
|(arg2 = 0)           |  M, X |  -  |    -    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|REMAINDER:           |       |     |         |          |       |       |
|(arg2 = 0)           |  M, N |  -  |    -    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|GAMMA, LGAMMA:       |   -   | M, H|    H    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|HYPOT:               |   -   |  -  |    H    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|SINH, SINHF:         |   -   |  -  |    +H   |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|COSH, COSHF:         |   -   |  -  |    H    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|ASIN, ACOS, ATAN2:   |       |     |         |          |       |       |
|ASINF, ACOSF, ATAN2F:|  M, 0 |  -  |    -    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|ACOSH:               |  M, N |  -  |    -    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|
|ATANH:               |       |     |         |          |       |       |
|(|arg| > 1)          |  M, N |  -  |    -    |     -    |   -   |   -   |
|(|arg| = 1)          |   -   | M, N|    -    |     -    |   -   |   -   |
|_____________________|_______|_____|_________|__________|_______|_______|






Page 3                       Reliant UNIX 5.44                Printed 11/98

matherr(3M)                                                     matherr(3M)

     Abbreviations

     M       Message is printed (not in the ANSI mode).

     H       HUGE is returned (HUGEVAL in the ANSI mode).

     -H      -HUGE is returned (-HUGEVAL in the ANSI mode).

     +H      HUGE or -HUGE is returned (HUGEVAL or -HUGEVAL in the ANSI
             mode).

     0       0 is returned.

     X       arg1 is returned.

     N       NaN is returned.

EXAMPLE
     #include <math.h>
     #include <stdio.h>
     #include <stdlib.h>
     #include <string.h>

     int
     matherr(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 */
     }

SEE ALSO
     math(5).





Page 4                       Reliant UNIX 5.44                Printed 11/98

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