Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libm/common/s_fdim.c')
-rw-r--r--newlib/libm/common/s_fdim.c37
1 files changed, 36 insertions, 1 deletions
diff --git a/newlib/libm/common/s_fdim.c b/newlib/libm/common/s_fdim.c
index 0010bf59d..8eb878209 100644
--- a/newlib/libm/common/s_fdim.c
+++ b/newlib/libm/common/s_fdim.c
@@ -3,6 +3,39 @@
* Permission to use, copy, modify, and distribute this software
* is freely granted, provided that this notice is preserved.
*/
+/*
+FUNCTION
+<<fdim>>, <<fdimf>>--positive difference
+INDEX
+ fdim
+INDEX
+ fdimf
+
+ANSI_SYNOPSIS
+ #include <math.h>
+ double fdim(double <[x]>, double <[y]>);
+ float fdimf(float <[x]>, float <[y]>);
+
+DESCRIPTION
+The <<fdim>> functions determine the positive difference between their
+arguments, returning:
+. <[x]> - <[y]> if <[x]> > <[y]>, or
+ @ifnottex
+. +0 if <[x]> <= <[y]>, or
+ @end ifnottex
+ @tex
+. +0 if <[x]> $\leq$ <[y]>, or
+ @end tex
+. NAN if either argument is NAN.
+A range error may occur.
+
+RETURNS
+The <<fdim>> functions return the positive difference value.
+
+PORTABILITY
+ANSI C, POSIX.
+
+*/
#include "fdlibm.h"
@@ -17,7 +50,9 @@
#endif
{
int c = __fpclassifyd(x);
- if (c == FP_NAN || c == FP_INFINITE)
+ if (c == FP_NAN) return(x);
+ if (__fpclassifyd(y) == FP_NAN) return(y);
+ if (c == FP_INFINITE)
return HUGE_VAL;
return x > y ? x - y : 0.0;