...
| Code Block | ||
|---|---|---|
| ||
double x;
double result;
if (isless(x, 0)){
/* handle domain error */
}
result = sqrt(x);
|
...
Error Checking
...
and Detection
| Wiki Markup |
|---|
The exact treatment of error conditions from math functions is quite complicated. C99 Section 7.12.1 defines the following behavior for floating point overflow \[[ISO/IEC 9899-1999|AA. C References#ISO/IEC 9899-1999]\] |
...
For functions where argument validation is difficult, including pow(), erfc(), lgamma(), and tgamma(), one can employ the following approach. This approach uses C99 standard functions for floating point errors.
| Code Block | ||
|---|---|---|
| ||
#include <math.h>
#if defined(math_errhandling) \
&& (math_errhandling & MATH_ERREXCEPT)
#include <fenv.h>
#endif
/* ... */
#if defined(math_errhandling) \
&& (math_errhandling & MATH_ERREXCEPT)
feclearexcept(FE_ALL_EXCEPT);
#endif
errno = 0;
/* call the function */
#if !defined(math_errhandling) \
|| (math_errhandling & MATH_ERRNO)
if (errno != 0) {
/* handle error */
}
#endif
#if defined(math_errhandling) \
&& (math_errhandling & MATH_ERREXCEPT)
if (fetestexcept(FE_INVALID
| FE_DIVBYZERO
| FE_OVERFLOW) != 0)
{
/* handle error */
}
#endif
|
See FLP03-A. Detect and handle floating point errors for more details on how to detect floating point errors.
Implementation Details
System V Interface Definition, Third Edition
...