cc [flag ...] file ... -lm [library ...]
double fdim(double x, double y);
float fdimf(float x, float y);
long double fdiml(long double x, long double y);
If x - y overflows fdim, fdimf and fdiml return ±HUGE_VAL, ±HUGE_VALF or ±HUGE_VALL (respectively) and errno is set to ERANGE.
On systems that support IEEE NaN, if the argument to any of these functions is a quiet NaN, that value is returned. If the argument is a signaling NaN, a quiet NaN is returned and the invalid operation exception is raised. In either case, errno is set to EDOM.
If the program was compiled with the -Xt compilation mode, a value that will compare equal to HUGE is returned instead of HUGE_VAL. These error handling procedures may be changed with the function matherr.