# 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.

Created Mon Nov 8 17:42:56 2004 on tillpc with info_to_html version 0.9.6.