libm.info: matherr

Go forward to modf
Go backward to log1p
Go up to Math
Go to the top op libm

`matherr'--modifiable math error handler

*Synopsis*
     #include <math.h>
     int matherr(struct exception *E);
   *Description*
`matherr' is called whenever a math library function generates an error.
You can replace `matherr' by your own subroutine to customize error
treatment.  The customized `matherr' must return 0 if it fails to
resolve the error, and non-zero if the error is resolved.
   When `matherr' returns a nonzero value, no error message is printed
and the value of `errno' is not modified.  You can accomplish either or
both of these things in your own `matherr' using the information passed
in the structure `*E'.
   This is the `exception' structure (defined in ``math.h''):
     	struct exception {
     	        int type;
     	        char *name;
     	        double arg1, arg2, retval;
     		int err;
     	};
   The members of the exception structure have the following meanings:
`type'
     The type of mathematical error that occured; macros encoding error
     types are also defined in ``math.h''.
`name'
     a pointer to a null-terminated string holding the name of the math
     library function where the error occurred.
`arg1, arg2'
     The arguments which caused the error.
`retval'
     The error return value (what the calling function will return).
`err'
     If set to be non-zero, this is the new value assigned to `errno'.
   The error types defined in ``math.h'' represent possible mathematical
errors as follows:
`DOMAIN'
     An argument was not in the domain of the function; e.g.
     `log(-1.0)'.
`SING'
     The requested calculation would result in a singularity; e.g.
     `pow(0.0,-2.0)'
`OVERFLOW'
     A calculation would produce a result too large to represent; e.g.
     `exp(1000.0)'.
`UNDERFLOW'
     A calculation would produce a result too small to represent; e.g.
     `exp(-1000.0)'.
`TLOSS'
     Total loss of precision.  The result would have no significant
     digits; e.g. `sin(10e70)'.
`PLOSS'
     Partial loss of precision.
*Returns*
The library definition for `matherr' returns `0' in all cases.
   You can change the calling function's result from a customized
`matherr' by modifying `e->retval', which propagates backs to the
caller.
   If `matherr' returns `0' (indicating that it was not able to resolve
the error) the caller sets `errno' to an appropriate value, and prints
an error message.
*Portability*
`matherr' is not ANSI C.