strtoumax: fix typo in previous commit.
[gnulib.git] / lib / asinl.c
index 9230240..c7ba71d 100644 (file)
@@ -9,7 +9,22 @@
  * ====================================================
  */
 
-#include "mathl.h"
+#include <config.h>
+
+/* Specification.  */
+#include <math.h>
+
+#if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+
+long double
+asinl (long double x)
+{
+  return asin (x);
+}
+
+#else
+
+/* Code based on glibc/sysdeps/ieee754/ldbl-128/e_asinl.c.  */
 
 /*
   Long double expansions contributed by
 
 /* asin(x)
  * Method :
- *     Since  asin(x) = x + x^3/6 + x^5*3/40 + x^7*15/336 + ...
- *     we approximate asin(x) on [0,0.5] by
- *             asin(x) = x + x*x^2*R(x^2)
+ *      Since  asin(x) = x + x^3/6 + x^5*3/40 + x^7*15/336 + ...
+ *      we approximate asin(x) on [0,0.5] by
+ *              asin(x) = x + x*x^2*R(x^2)
  *      Between .5 and .625 the approximation is
  *              asin(0.5625 + x) = asin(0.5625) + x rS(x) / sS(x)
- *     For x in [0.625,1]
- *             asin(x) = pi/2-2*asin(sqrt((1-x)/2))
+ *      For x in [0.625,1]
+ *              asin(x) = pi/2-2*asin(sqrt((1-x)/2))
  *
  * Special cases:
- *     if x is NaN, return x itself;
- *     if |x|>1, return NaN with invalid signal.
+ *      if x is NaN, return x itself;
+ *      if |x|>1, return NaN with invalid signal.
  *
  */
 
 
-#include <math.h>
-
 static const long double
   one = 1.0L,
   huge = 1.0e+4932L,
@@ -42,7 +55,7 @@ static const long double
   pio2_lo = 4.3359050650618905123985220130216759843812E-35L,
   pio4_hi = 7.8539816339744830961566084581987569936977E-1L,
 
-       /* coefficient for R(x^2) */
+        /* coefficient for R(x^2) */
 
   /* asin(x) = x + x^3 pS(x^2) / qS(x^2)
      0 <= x <= 0.5
@@ -113,19 +126,19 @@ asinl (long double x)
       y = -x;
     }
 
-  if (y >= 1.0L)       /* |x|>= 1 */
+  if (y >= 1.0L)        /* |x|>= 1 */
     {
       if (y == 1.0L)
-       /* asin(1)=+-pi/2 with inexact */
-       return x * pio2_hi + x * pio2_lo;
+        /* asin(1)=+-pi/2 with inexact */
+        return x * pio2_hi + x * pio2_lo;
 
-      return (x - x) / (x - x);        /* asin(|x|>1) is NaN */
+      return (x - x) / (x - x); /* asin(|x|>1) is NaN */
     }
   else if (y < 0.5L) /* |x| < 0.5 */
     {
       if (y < 0.000000000000000006938893903907228377647697925567626953125L) /* |x| < 2**-57 */
-       if (huge + y > one)
-         return y;             /* return x with inexact if x!=0 */
+        if (huge + y > one)
+          return y;             /* return x with inexact if x!=0 */
 
       t = x * x;
       p = (((((((((pS9 * t
@@ -157,62 +170,65 @@ asinl (long double x)
     {
       t = y - 0.5625;
       p = ((((((((((rS10 * t
-                   + rS9) * t
-                  + rS8) * t
-                 + rS7) * t
-                + rS6) * t
-               + rS5) * t
-              + rS4) * t
-             + rS3) * t
-            + rS2) * t
-           + rS1) * t
-          + rS0) * t;
+                    + rS9) * t
+                   + rS8) * t
+                  + rS7) * t
+                 + rS6) * t
+                + rS5) * t
+               + rS4) * t
+              + rS3) * t
+             + rS2) * t
+            + rS1) * t
+           + rS0) * t;
 
       q = ((((((((( t
-                   + sS9) * t
-                 + sS8) * t
-                + sS7) * t
-               + sS6) * t
-              + sS5) * t
-             + sS4) * t
-            + sS3) * t
-           + sS2) * t
-          + sS1) * t
-       + sS0;
+                    + sS9) * t
+                  + sS8) * t
+                 + sS7) * t
+                + sS6) * t
+               + sS5) * t
+              + sS4) * t
+             + sS3) * t
+            + sS2) * t
+           + sS1) * t
+        + sS0;
       t = asinr5625 + p / q;
     }
   else
-    t = pio2_hi + pio2_lo - 2 * asinl(sqrtl((1-y)/2));
+    t = pio2_hi + pio2_lo - 2 * asinl (sqrtl ((1 - y) / 2));
 
   return t * sign;
 }
 
+#endif
+
 #if 0
-main()
+int
+main (void)
 {
   printf ("%.18Lg %.18Lg\n",
-          asinl(1.0L),
+          asinl (1.0L),
           1.5707963267948966192313216916397514420984L);
   printf ("%.18Lg %.18Lg\n",
-          asinl(0.7071067811865475244008443621048490392848L),
+          asinl (0.7071067811865475244008443621048490392848L),
           0.7853981633974483096156608458198757210492L);
   printf ("%.18Lg %.18Lg\n",
-          asinl(0.5L),
+          asinl (0.5L),
           0.5235987755982988730771072305465838140328L);
   printf ("%.18Lg %.18Lg\n",
-          asinl(0.3090169943749474241022934171828190588600L),
+          asinl (0.3090169943749474241022934171828190588600L),
           0.3141592653589793238462643383279502884196L);
   printf ("%.18Lg %.18Lg\n",
-          asinl(-1.0L),
+          asinl (-1.0L),
           -1.5707963267948966192313216916397514420984L);
   printf ("%.18Lg %.18Lg\n",
-          asinl(-0.7071067811865475244008443621048490392848L),
+          asinl (-0.7071067811865475244008443621048490392848L),
           -0.7853981633974483096156608458198757210492L);
   printf ("%.18Lg %.18Lg\n",
-          asinl(-0.5L),
+          asinl (-0.5L),
           -0.5235987755982988730771072305465838140328L);
   printf ("%.18Lg %.18Lg\n",
-          asinl(-0.3090169943749474241022934171828190588600L),
+          asinl (-0.3090169943749474241022934171828190588600L),
           -0.3141592653589793238462643383279502884196L);
 }
 #endif