diff options
Diffstat (limited to 'winsup/cygwin/math/fdiml.c')
-rw-r--r-- | winsup/cygwin/math/fdiml.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/winsup/cygwin/math/fdiml.c b/winsup/cygwin/math/fdiml.c new file mode 100644 index 000000000..3be0679ac --- /dev/null +++ b/winsup/cygwin/math/fdiml.c @@ -0,0 +1,24 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#include <errno.h> +#include <math.h> + +long double +fdiml (long double x, long double y) +{ + int cx = fpclassify (x), cy = fpclassify (y); + long double r; + + if (cx == FP_NAN || cy == FP_NAN + || (y < 0 && cx == FP_INFINITE && cy == FP_INFINITE)) + return x - y; /* Take care invalid flag is raised. */ + if (x <= y) + return 0.0; + r = x - y; + if (fpclassify (r) == FP_INFINITE) + errno = ERANGE; + return r; +} |