Print this page
11210 libm should be cstyle(1ONBLD) clean
@@ -20,18 +20,19 @@
*/
/*
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
*/
+
/*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma weak __acos = acos
-/* INDENT OFF */
+
/*
* acos(x)
* Method :
* acos(x) = pi/2 - asin(x)
* acos(-x) = pi/2 + asin(x)
@@ -52,19 +53,18 @@
* if x is NaN, return x itself;
* if |x|>1, return NaN with invalid signal.
*
* Function needed: sqrt
*/
-/* INDENT ON */
#include "libm_protos.h" /* _SVID_libm_error */
#include "libm_macros.h"
#include <math.h>
-/* INDENT OFF */
static const double xxx[] = {
-/* one */ 1.00000000000000000000e+00, /* 3FF00000, 00000000 */
+/* one */
+ 1.00000000000000000000e+00, /* 3FF00000, 00000000 */
/* pi */ 3.14159265358979311600e+00, /* 400921FB, 54442D18 */
/* pio2_hi */ 1.57079632679489655800e+00, /* 3FF921FB, 54442D18 */
/* pio2_lo */ 6.12323399573676603587e-17, /* 3C91A626, 33145C07 */
/* pS0 */ 1.66666666666666657415e-01, /* 3FC55555, 55555555 */
/* pS1 */ -3.25565818622400915405e-01, /* BFD4D612, 03EB6F7D */
@@ -75,10 +75,11 @@
/* qS1 */ -2.40339491173441421878e+00, /* C0033A27, 1C8A2D4B */
/* qS2 */ 2.02094576023350569471e+00, /* 40002AE5, 9C598AC8 */
/* qS3 */ -6.88283971605453293030e-01, /* BFE6066C, 1B8D0159 */
/* qS4 */ 7.70381505559019352791e-02 /* 3FB3B8C5, B12E9282 */
};
+
#define one xxx[0]
#define pi xxx[1]
#define pio2_hi xxx[2]
#define pio2_lo xxx[3]
#define pS0 xxx[4]
@@ -89,64 +90,68 @@
#define pS5 xxx[9]
#define qS1 xxx[10]
#define qS2 xxx[11]
#define qS3 xxx[12]
#define qS4 xxx[13]
-/* INDENT ON */
double
-acos(double x) {
+acos(double x)
+{
double z, p, q, r, w, s, c, df;
int hx, ix;
- hx = ((int *) &x)[HIWORD];
+ hx = ((int *)&x)[HIWORD];
ix = hx & 0x7fffffff;
+
if (ix >= 0x3ff00000) { /* |x| >= 1 */
- if (((ix - 0x3ff00000) | ((int *) &x)[LOWORD]) == 0) {
+ if (((ix - 0x3ff00000) | ((int *)&x)[LOWORD]) == 0) {
/* |x| == 1 */
if (hx > 0) /* acos(1) = 0 */
return (0.0);
else /* acos(-1) = pi */
return (pi + 2.0 * pio2_lo);
- } else if (isnan(x))
+ } else if (isnan(x)) {
#if defined(FPADD_TRAPS_INCOMPLETE_ON_NAN)
return (ix >= 0x7ff80000 ? x : (x - x) / (x - x));
/* assumes sparc-like QNaN */
#else
- return (x - x) / (x - x); /* acos(|x|>1) is NaN */
+ return ((x - x) / (x - x)); /* acos(|x|>1) is NaN */
#endif
- else
+ } else {
return (_SVID_libm_err(x, x, 1));
}
+ }
+
if (ix < 0x3fe00000) { /* |x| < 0.5 */
if (ix <= 0x3c600000)
return (pio2_hi + pio2_lo); /* if |x| < 2**-57 */
+
z = x * x;
- p = z * (pS0 + z * (pS1 + z * (pS2 + z * (pS3 +
- z * (pS4 + z * pS5)))));
+ p = z * (pS0 + z * (pS1 + z * (pS2 + z * (pS3 + z * (pS4 + z *
+ pS5)))));
q = one + z * (qS1 + z * (qS2 + z * (qS3 + z * qS4)));
r = p / q;
return (pio2_hi - (x - (pio2_lo - x * r)));
} else if (hx < 0) {
/* x < -0.5 */
z = (one + x) * 0.5;
- p = z * (pS0 + z * (pS1 + z * (pS2 + z * (pS3 +
- z * (pS4 + z * pS5)))));
+ p = z * (pS0 + z * (pS1 + z * (pS2 + z * (pS3 + z * (pS4 + z *
+ pS5)))));
q = one + z * (qS1 + z * (qS2 + z * (qS3 + z * qS4)));
s = sqrt(z);
r = p / q;
w = r * s - pio2_lo;
return (pi - 2.0 * (s + w));
} else {
/* x > 0.5 */
z = (one - x) * 0.5;
s = sqrt(z);
df = s;
- ((int *) &df)[LOWORD] = 0;
+ ((int *)&df)[LOWORD] = 0;
c = (z - df * df) / (s + df);
- p = z * (pS0 + z * (pS1 + z * (pS2 + z * (pS3 +
- z * (pS4 + z * pS5)))));
+ p = z * (pS0 + z * (pS1 + z * (pS2 + z * (pS3 + z * (pS4 + z *
+ pS5)))));
q = one + z * (qS1 + z * (qS2 + z * (qS3 + z * qS4)));
r = p / q;
w = r * s + c;
return (2.0 * (df + w));
}