summaryrefslogtreecommitdiff
path: root/newlib/libm/mathfp/s_fabs.c
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libm/mathfp/s_fabs.c')
-rw-r--r--newlib/libm/mathfp/s_fabs.c80
1 files changed, 80 insertions, 0 deletions
diff --git a/newlib/libm/mathfp/s_fabs.c b/newlib/libm/mathfp/s_fabs.c
new file mode 100644
index 00000000000..9e1d75eb336
--- /dev/null
+++ b/newlib/libm/mathfp/s_fabs.c
@@ -0,0 +1,80 @@
+
+/* @(#)z_fabs.c 1.0 98/08/13 */
+
+/*
+FUNCTION
+ <<fabs>>, <<fabsf>>---absolute value (magnitude)
+INDEX
+ fabs
+INDEX
+ fabsf
+
+ANSI_SYNOPSIS
+ #include <math.h>
+ double fabs(double <[x]>);
+ float fabsf(float <[x]>);
+
+TRAD_SYNOPSIS
+ #include <math.h>
+ double fabs(<[x]>)
+ double <[x]>;
+
+ float fabsf(<[x]>)
+ float <[x]>;
+
+DESCRIPTION
+<<fabs>> and <<fabsf>> calculate
+@tex
+$|x|$,
+@end tex
+the absolute value (magnitude) of the argument <[x]>, by direct
+manipulation of the bit representation of <[x]>.
+
+RETURNS
+The calculated value is returned.
+
+PORTABILITY
+<<fabs>> is ANSI.
+<<fabsf>> is an extension.
+
+*/
+
+/******************************************************************
+ * Floating-Point Absolute Value
+ *
+ * Input:
+ * x - floating-point number
+ *
+ * Output:
+ * absolute value of x
+ *
+ * Description:
+ * fabs computes the absolute value of a floating point number.
+ *
+ *****************************************************************/
+
+#include "fdlibm.h"
+#include "zmath.h"
+
+#ifndef _DOUBLE_IS_32BITS
+
+double
+_DEFUN (fabs, (double),
+ double x)
+{
+ switch (numtest (x))
+ {
+ case NAN:
+ errno = EDOM;
+ return (x);
+ case INF:
+ errno = ERANGE;
+ return (x);
+ case 0:
+ return (0.0);
+ default:
+ return (x < 0.0 ? -x : x);
+ }
+}
+
+#endif /* _DOUBLE_IS_32BITS */