Contents|Index|Previous|Next
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.
The following example shows 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 occurred; 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.
COMPLIANCE
matherr
is not ANSI C.
Top|Contents|Index|Previous|Next