Back to index

lightning-sunbird  0.9+nobinonly
Functions | Variables
e_acos.c File Reference
#include "fdlibm.h"

Go to the source code of this file.

Functions

double __ieee754_acos (double x)

Variables

static double one = 1.00000000000000000000e+00
static double pi = 3.14159265358979311600e+00
static double pio2_hi = 1.57079632679489655800e+00
static double pio2_lo = 6.12323399573676603587e-17
static double pS0 = 1.66666666666666657415e-01
static double pS1 = -3.25565818622400915405e-01
static double pS2 = 2.01212532134862925881e-01
static double pS3 = -4.00555345006794114027e-02
static double pS4 = 7.91534994289814532176e-04
static double pS5 = 3.47933107596021167570e-05
static double qS1 = -2.40339491173441421878e+00
static double qS2 = 2.02094576023350569471e+00
static double qS3 = -6.88283971605453293030e-01
static double qS4 = 7.70381505559019352791e-02

Function Documentation

double __ieee754_acos ( double  x)

Definition at line 101 of file e_acos.c.

{
        fd_twoints u;
        double df;
       double z,p,q,r,w,s,c;
       int hx,ix;
        u.d = x;
       hx = __HI(u);
       ix = hx&0x7fffffff;
       if(ix>=0x3ff00000) { /* |x| >= 1 */
           if(((ix-0x3ff00000)|__LO(u))==0) {    /* |x|==1 */
              if(hx>0) return 0.0;        /* acos(1) = 0  */
              else return pi+2.0*pio2_lo; /* acos(-1)= pi */
           }
           return (x-x)/(x-x);            /* acos(|x|>1) is NaN */
       }
       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)))));
           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)))));
           q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4)));
           s = fd_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 = fd_sqrt(z);
           u.d = s;
           __LO(u) = 0;
            df = u.d;
           c  = (z-df*df)/(s+df);
           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);
       }
}

Here is the call graph for this function:

Here is the caller graph for this function:


Variable Documentation

double one = 1.00000000000000000000e+00 [static]

Definition at line 83 of file e_acos.c.

double pi = 3.14159265358979311600e+00 [static]

Definition at line 84 of file e_acos.c.

double pio2_hi = 1.57079632679489655800e+00 [static]

Definition at line 85 of file e_acos.c.

double pio2_lo = 6.12323399573676603587e-17 [static]

Definition at line 86 of file e_acos.c.

double pS0 = 1.66666666666666657415e-01 [static]

Definition at line 87 of file e_acos.c.

double pS1 = -3.25565818622400915405e-01 [static]

Definition at line 88 of file e_acos.c.

double pS2 = 2.01212532134862925881e-01 [static]

Definition at line 89 of file e_acos.c.

double pS3 = -4.00555345006794114027e-02 [static]

Definition at line 90 of file e_acos.c.

double pS4 = 7.91534994289814532176e-04 [static]

Definition at line 91 of file e_acos.c.

double pS5 = 3.47933107596021167570e-05 [static]

Definition at line 92 of file e_acos.c.

double qS1 = -2.40339491173441421878e+00 [static]

Definition at line 93 of file e_acos.c.

double qS2 = 2.02094576023350569471e+00 [static]

Definition at line 94 of file e_acos.c.

double qS3 = -6.88283971605453293030e-01 [static]

Definition at line 95 of file e_acos.c.

double qS4 = 7.70381505559019352791e-02 [static]

Definition at line 96 of file e_acos.c.