Manpage of MATHERR
1.36 `matherr'--modifiable math error handler
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.
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.
will give you access to the complete manual.