diff options
author | Szabolcs Nagy <nsz@port70.net> | 2018-11-30 21:15:23 +0000 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2019-04-17 13:08:45 -0400 |
commit | 4f8acf953ccf1a978a3378db7fb1e8d5a7afbca1 (patch) | |
tree | c007aa592fe012925b1679dc9dfef34f7b9671c5 | |
parent | 9ef6ca4235b7a66aefa432295c02b4df64a53f2e (diff) | |
download | musl-4f8acf953ccf1a978a3378db7fb1e8d5a7afbca1.zip musl-4f8acf953ccf1a978a3378db7fb1e8d5a7afbca1.tar.gz musl-4f8acf953ccf1a978a3378db7fb1e8d5a7afbca1.tar.bz2 |
math: add double precision error handling functions
-rw-r--r-- | src/internal/libm.h | 5 | ||||
-rw-r--r-- | src/math/__math_divzero.c | 6 | ||||
-rw-r--r-- | src/math/__math_invalid.c | 6 | ||||
-rw-r--r-- | src/math/__math_oflow.c | 6 | ||||
-rw-r--r-- | src/math/__math_uflow.c | 6 | ||||
-rw-r--r-- | src/math/__math_xflow.c | 6 |
6 files changed, 35 insertions, 0 deletions
diff --git a/src/internal/libm.h b/src/internal/libm.h index a52a0b8..62da4bd 100644 --- a/src/internal/libm.h +++ b/src/internal/libm.h @@ -222,5 +222,10 @@ hidden float __math_uflowf(uint32_t); hidden float __math_oflowf(uint32_t); hidden float __math_divzerof(uint32_t); hidden float __math_invalidf(float); +hidden double __math_xflow(uint32_t, double); +hidden double __math_uflow(uint32_t); +hidden double __math_oflow(uint32_t); +hidden double __math_divzero(uint32_t); +hidden double __math_invalid(double); #endif diff --git a/src/math/__math_divzero.c b/src/math/__math_divzero.c new file mode 100644 index 0000000..59d2135 --- /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 0000000..1774049 --- /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 0000000..c85dbf9 --- /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 0000000..b90594a --- /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 0000000..744203c --- /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); +} |