summaryrefslogtreecommitdiff
path: root/src/math/atanl.c
diff options
context:
space:
mode:
authorSzabolcs Nagy <nsz@port70.net>2012-11-14 01:01:38 +0100
committerSzabolcs Nagy <nsz@port70.net>2012-11-14 01:01:38 +0100
commit45ff9d8eb6f43b8f612d1b01ada627f5b4447c45 (patch)
tree92515e65ee6782a78ce4a1c97839872a14939155 /src/math/atanl.c
parent529a8de46cbf6cce525ab25c4532822006502f29 (diff)
downloadmusl-45ff9d8eb6f43b8f612d1b01ada627f5b4447c45.tar.gz
math: ld80 invtrig cleanups
keeping only commonly used data in invtrigl
Diffstat (limited to 'src/math/atanl.c')
-rw-r--r--src/math/atanl.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/math/atanl.c b/src/math/atanl.c
index 36072c17..33ecff0d 100644
--- a/src/math/atanl.c
+++ b/src/math/atanl.c
@@ -23,8 +23,53 @@ long double atanl(long double x)
}
#elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384
#include "__invtrigl.h"
+
+#define ATAN_CONST (BIAS + 65) /* 2**65 */
+#define ATAN_LINEAR (BIAS - 32) /* 2**-32 */
static const long double huge = 1.0e300;
+static const long double atanhi[] = {
+ 4.63647609000806116202e-01L,
+ 7.85398163397448309628e-01L,
+ 9.82793723247329067960e-01L,
+ 1.57079632679489661926e+00L,
+};
+
+static const long double atanlo[] = {
+ 1.18469937025062860669e-20L,
+ -1.25413940316708300586e-20L,
+ 2.55232234165405176172e-20L,
+ -2.50827880633416601173e-20L,
+};
+
+static const long double aT[] = {
+ 3.33333333333333333017e-01L,
+ -1.99999999999999632011e-01L,
+ 1.42857142857046531280e-01L,
+ -1.11111111100562372733e-01L,
+ 9.09090902935647302252e-02L,
+ -7.69230552476207730353e-02L,
+ 6.66661718042406260546e-02L,
+ -5.88158892835030888692e-02L,
+ 5.25499891539726639379e-02L,
+ -4.70119845393155721494e-02L,
+ 4.03539201366454414072e-02L,
+ -2.91303858419364158725e-02L,
+ 1.24822046299269234080e-02L,
+};
+
+static long double T_even(long double x)
+{
+ return aT[0] + x * (aT[2] + x * (aT[4] + x * (aT[6] +
+ x * (aT[8] + x * (aT[10] + x * aT[12])))));
+}
+
+static long double T_odd(long double x)
+{
+ return aT[1] + x * (aT[3] + x * (aT[5] + x * (aT[7] +
+ x * (aT[9] + x * aT[11]))));
+}
+
long double atanl(long double x)
{
union IEEEl2bits u;