summaryrefslogtreecommitdiff
path: root/src/math
diff options
context:
space:
mode:
authorSzabolcs Nagy <nsz@port70.net>2018-11-30 21:15:23 +0000
committerRich Felker <dalias@aerifal.cx>2019-04-17 13:08:45 -0400
commit4f8acf953ccf1a978a3378db7fb1e8d5a7afbca1 (patch)
treec007aa592fe012925b1679dc9dfef34f7b9671c5 /src/math
parent9ef6ca4235b7a66aefa432295c02b4df64a53f2e (diff)
downloadmusl-4f8acf953ccf1a978a3378db7fb1e8d5a7afbca1.tar.gz
math: add double precision error handling functions
Diffstat (limited to 'src/math')
-rw-r--r--src/math/__math_divzero.c6
-rw-r--r--src/math/__math_invalid.c6
-rw-r--r--src/math/__math_oflow.c6
-rw-r--r--src/math/__math_uflow.c6
-rw-r--r--src/math/__math_xflow.c6
5 files changed, 30 insertions, 0 deletions
diff --git a/src/math/__math_divzero.c b/src/math/__math_divzero.c
new file mode 100644
index 00000000..59d21350
--- /dev/null
+++ b/src/math/__math_divzero.c
@@ -0,0 +1,6 @@
+#include "libm.h"
+
+double __math_divzero(uint32_t sign)
+{
+ return fp_barrier(sign ? -1.0 : 1.0) / 0.0;
+}
diff --git a/src/math/__math_invalid.c b/src/math/__math_invalid.c
new file mode 100644
index 00000000..17740490
--- /dev/null
+++ b/src/math/__math_invalid.c
@@ -0,0 +1,6 @@
+#include "libm.h"
+
+double __math_invalid(double x)
+{
+ return (x - x) / (x - x);
+}
diff --git a/src/math/__math_oflow.c b/src/math/__math_oflow.c
new file mode 100644
index 00000000..c85dbf98
--- /dev/null
+++ b/src/math/__math_oflow.c
@@ -0,0 +1,6 @@
+#include "libm.h"
+
+double __math_oflow(uint32_t sign)
+{
+ return __math_xflow(sign, 0x1p769);
+}
diff --git a/src/math/__math_uflow.c b/src/math/__math_uflow.c
new file mode 100644
index 00000000..b90594ae
--- /dev/null
+++ b/src/math/__math_uflow.c
@@ -0,0 +1,6 @@
+#include "libm.h"
+
+double __math_uflow(uint32_t sign)
+{
+ return __math_xflow(sign, 0x1p-767);
+}
diff --git a/src/math/__math_xflow.c b/src/math/__math_xflow.c
new file mode 100644
index 00000000..744203c4
--- /dev/null
+++ b/src/math/__math_xflow.c
@@ -0,0 +1,6 @@
+#include "libm.h"
+
+double __math_xflow(uint32_t sign, double y)
+{
+ return eval_as_double(fp_barrier(sign ? -y : y) * y);
+}