summaryrefslogtreecommitdiff
path: root/libm/double/fabs.c
diff options
context:
space:
mode:
Diffstat (limited to 'libm/double/fabs.c')
-rw-r--r--libm/double/fabs.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/libm/double/fabs.c b/libm/double/fabs.c
new file mode 100644
index 000000000..0c4531a6c
--- /dev/null
+++ b/libm/double/fabs.c
@@ -0,0 +1,56 @@
+/* fabs.c
+ *
+ * Absolute value
+ *
+ *
+ *
+ * SYNOPSIS:
+ *
+ * double x, y;
+ *
+ * y = fabs( x );
+ *
+ *
+ *
+ * DESCRIPTION:
+ *
+ * Returns the absolute value of the argument.
+ *
+ */
+
+
+#include <math.h>
+/* Avoid using UNK if possible. */
+#ifdef UNK
+#if BIGENDIAN
+#define MIEEE 1
+#else
+#define IBMPC 1
+#endif
+#endif
+
+double fabs(x)
+double x;
+{
+union
+ {
+ double d;
+ short i[4];
+ } u;
+
+u.d = x;
+#ifdef IBMPC
+ u.i[3] &= 0x7fff;
+#endif
+#ifdef MIEEE
+ u.i[0] &= 0x7fff;
+#endif
+#ifdef DEC
+ u.i[3] &= 0x7fff;
+#endif
+#ifdef UNK
+if( u.d < 0 )
+ u.d = -u.d;
+#endif
+return( u.d );
+}