Back to index

glibc  2.9
Functions | Variables
e_j1f.c File Reference
#include "math.h"
#include "math_private.h"

Go to the source code of this file.

Functions

static float ponef ()
static float qonef ()
float __ieee754_j1f (float x)
float __ieee754_y1f (float x)
static float ponef (float x)
static float qonef (float x)

Variables

static float huge = 1e30
static float one = 1.0
static float invsqrtpi = 5.6418961287e-01
static float tpi = 6.3661974669e-01
static float r00 = -6.2500000000e-02
static float r01 = 1.4070566976e-03
static float r02 = -1.5995563444e-05
static float r03 = 4.9672799207e-08
static float s01 = 1.9153760746e-02
static float s02 = 1.8594678841e-04
static float s03 = 1.1771846857e-06
static float s04 = 5.0463624390e-09
static float s05 = 1.2354227016e-11
static float zero = 0.0
static float U0 [5]
static float V0 [5]
static float pr8 [6]
static float ps8 [5]
static float pr5 [6]
static float ps5 [5]
static float pr3 [6]
static float ps3 [5]
static float pr2 [6]
static float ps2 [5]
static float qr8 [6]
static float qs8 [6]
static float qr5 [6]
static float qs5 [6]
static float qr3 [6]
static float qs3 [6]
static float qr2 [6]
static float qs2 [6]

Function Documentation

float __ieee754_j1f ( float  x)

Definition at line 58 of file e_j1f.c.

{
       float z, s,c,ss,cc,r,u,v,y;
       int32_t hx,ix;

       GET_FLOAT_WORD(hx,x);
       ix = hx&0x7fffffff;
       if(ix>=0x7f800000) return one/x;
       y = fabsf(x);
       if(ix >= 0x40000000) {      /* |x| >= 2.0 */
              __sincosf (y, &s, &c);
              ss = -s-c;
              cc = s-c;
              if(ix<0x7f000000) {  /* make sure y+y not overflow */
                  z = __cosf(y+y);
                  if ((s*c)>zero) cc = z/ss;
                  else          ss = z/cc;
              }
       /*
        * j1(x) = 1/sqrt(pi) * (P(1,x)*cc - Q(1,x)*ss) / sqrt(x)
        * y1(x) = 1/sqrt(pi) * (P(1,x)*ss + Q(1,x)*cc) / sqrt(x)
        */
              if(ix>0x48000000) z = (invsqrtpi*cc)/__ieee754_sqrtf(y);
              else {
                  u = ponef(y); v = qonef(y);
                  z = invsqrtpi*(u*cc-v*ss)/__ieee754_sqrtf(y);
              }
              if(hx<0) return -z;
              else    return  z;
       }
       if(ix<0x32000000) {  /* |x|<2**-27 */
           if(huge+x>one) return (float)0.5*x;/* inexact if x!=0 necessary */
       }
       z = x*x;
       r =  z*(r00+z*(r01+z*(r02+z*r03)));
       s =  one+z*(s01+z*(s02+z*(s03+z*(s04+z*s05))));
       r *= x;
       return(x*(float)0.5+r/s);
}

Here is the call graph for this function:

Here is the caller graph for this function:

float __ieee754_y1f ( float  x)

Definition at line 126 of file e_j1f.c.

{
       float z, s,c,ss,cc,u,v;
       int32_t hx,ix;

       GET_FLOAT_WORD(hx,x);
        ix = 0x7fffffff&hx;
    /* if Y1(NaN) is NaN, Y1(-inf) is NaN, Y1(inf) is 0 */
       if(ix>=0x7f800000) return  one/(x+x*x);
        if(ix==0) return -HUGE_VALF+x;  /* -inf and overflow exception.  */
        if(hx<0) return zero/(zero*x);
        if(ix >= 0x40000000) {  /* |x| >= 2.0 */
              __sincosf (x, &s, &c);
                ss = -s-c;
                cc = s-c;
                if(ix<0x7f000000) {  /* make sure x+x not overflow */
                    z = __cosf(x+x);
                    if ((s*c)>zero) cc = z/ss;
                    else            ss = z/cc;
                }
        /* y1(x) = sqrt(2/(pi*x))*(p1(x)*sin(x0)+q1(x)*cos(x0))
         * where x0 = x-3pi/4
         *      Better formula:
         *              cos(x0) = cos(x)cos(3pi/4)+sin(x)sin(3pi/4)
         *                      =  1/sqrt(2) * (sin(x) - cos(x))
         *              sin(x0) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4)
         *                      = -1/sqrt(2) * (cos(x) + sin(x))
         * To avoid cancellation, use
         *              sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x))
         * to compute the worse one.
         */
                if(ix>0x48000000) z = (invsqrtpi*ss)/__ieee754_sqrtf(x);
                else {
                    u = ponef(x); v = qonef(x);
                    z = invsqrtpi*(u*ss+v*cc)/__ieee754_sqrtf(x);
                }
                return z;
        }
        if(ix<=0x24800000) {    /* x < 2**-54 */
            return(-tpi/x);
        }
        z = x*x;
        u = U0[0]+z*(U0[1]+z*(U0[2]+z*(U0[3]+z*U0[4])));
        v = one+z*(V0[0]+z*(V0[1]+z*(V0[2]+z*(V0[3]+z*V0[4]))));
        return(x*(u/v) + tpi*(__ieee754_j1f(x)*__ieee754_logf(x)-one/x));
}

Here is the call graph for this function:

Here is the caller graph for this function:

static float ponef ( ) [static]

Here is the caller graph for this function:

static float ponef ( float  x) [static]

Definition at line 284 of file e_j1f.c.

{
#ifdef __STDC__
       const float *p,*q;
#else
       float *p,*q;
#endif
       float z,r,s;
        int32_t ix;
       GET_FLOAT_WORD(ix,x);
       ix &= 0x7fffffff;
        if(ix>=0x41000000)     {p = pr8; q= ps8;}
        else if(ix>=0x40f71c58){p = pr5; q= ps5;}
        else if(ix>=0x4036db68){p = pr3; q= ps3;}
        else if(ix>=0x40000000){p = pr2; q= ps2;}
        z = one/(x*x);
        r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5]))));
        s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*q[4]))));
        return one+ r/s;
}
static float qonef ( )

Here is the caller graph for this function:

static float qonef ( float  x) [static]

Definition at line 421 of file e_j1f.c.

{
#ifdef __STDC__
       const float *p,*q;
#else
       float *p,*q;
#endif
       float  s,r,z;
       int32_t ix;
       GET_FLOAT_WORD(ix,x);
       ix &= 0x7fffffff;
       if(ix>=0x40200000)     {p = qr8; q= qs8;}
       else if(ix>=0x40f71c58){p = qr5; q= qs5;}
       else if(ix>=0x4036db68){p = qr3; q= qs3;}
       else if(ix>=0x40000000){p = qr2; q= qs2;}
       z = one/(x*x);
       r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5]))));
       s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*(q[4]+z*q[5])))));
       return ((float).375 + r/s)/x;
}

Variable Documentation

float huge = 1e30 [static]

Definition at line 34 of file e_j1f.c.

float invsqrtpi = 5.6418961287e-01 [static]

Definition at line 36 of file e_j1f.c.

float one = 1.0 [static]

Definition at line 35 of file e_j1f.c.

float pr2[6] [static]
Initial value:
 {

  1.0771083225e-07, 
  1.1717621982e-01, 
  2.3685150146e+00, 
  1.2242610931e+01, 
  1.7693971634e+01, 
  5.0735230446e+00, 
}

Definition at line 260 of file e_j1f.c.

float pr3[6] [static]
Initial value:
 {

  3.0250391081e-09, 
  1.1718686670e-01, 
  3.9329774380e+00, 
  3.5119403839e+01, 
  9.1055007935e+01, 
  4.8559066772e+01, 
}

Definition at line 236 of file e_j1f.c.

float pr5[6] [static]
Initial value:
 { 

  1.3199052094e-11, 
  1.1718749255e-01, 
  6.8027510643e+00, 
  1.0830818176e+02, 
  5.1763616943e+02, 
  5.2871520996e+02, 
}

Definition at line 212 of file e_j1f.c.

float pr8[6] [static]
Initial value:
 { 

  0.0000000000e+00, 
  1.1718750000e-01, 
  1.3239480972e+01, 
  4.1205184937e+02, 
  3.8747453613e+03, 
  7.9144794922e+03, 
}

Definition at line 188 of file e_j1f.c.

float ps2[5] [static]
Initial value:
 {

  2.1436485291e+01, 
  1.2529022980e+02, 
  2.3227647400e+02, 
  1.1767937469e+02, 
  8.3646392822e+00, 
}

Definition at line 272 of file e_j1f.c.

float ps3[5] [static]
Initial value:
 {

  3.4791309357e+01, 
  3.3676245117e+02, 
  1.0468714600e+03, 
  8.9081134033e+02, 
  1.0378793335e+02, 
}

Definition at line 248 of file e_j1f.c.

float ps5[5] [static]
Initial value:
 {

  5.9280597687e+01, 
  9.9140142822e+02, 
  5.3532670898e+03, 
  7.8446904297e+03, 
  1.5040468750e+03, 
}

Definition at line 224 of file e_j1f.c.

float ps8[5] [static]
Initial value:
 {

  1.1420736694e+02, 
  3.6509309082e+03, 
  3.6956207031e+04, 
  9.7602796875e+04, 
  3.0804271484e+04, 
}

Definition at line 200 of file e_j1f.c.

float qr2[6] [static]
Initial value:
 {

 -1.7838172539e-07, 
 -1.0251704603e-01, 
 -2.7522056103e+00, 
 -1.9663616180e+01, 
 -4.2325313568e+01, 
 -2.1371921539e+01, 
}

Definition at line 396 of file e_j1f.c.

float qr3[6] [static]
Initial value:
 {

 -5.0783124372e-09, 
 -1.0253783315e-01, 
 -4.6101160049e+00, 
 -5.7847221375e+01, 
 -2.2824453735e+02, 
 -2.1921012878e+02, 
}

Definition at line 371 of file e_j1f.c.

float qr5[6] [static]
Initial value:
 { 

 -2.0897993405e-11, 
 -1.0253904760e-01, 
 -8.0564479828e+00, 
 -1.8366960144e+02, 
 -1.3731937256e+03, 
 -2.6124443359e+03, 
}

Definition at line 346 of file e_j1f.c.

float qr8[6] [static]
Initial value:
 { 

  0.0000000000e+00, 
 -1.0253906250e-01, 
 -1.6271753311e+01, 
 -7.5960174561e+02, 
 -1.1849806641e+04, 
 -4.8438511719e+04, 
}

Definition at line 321 of file e_j1f.c.

float qs2[6] [static]
Initial value:
 {

  2.9533363342e+01, 
  2.5298155212e+02, 
  7.5750280762e+02, 
  7.3939318848e+02, 
  1.5594900513e+02, 
 -4.9594988823e+00, 
}

Definition at line 408 of file e_j1f.c.

float qs3[6] [static]
Initial value:
 {

  4.7665153503e+01, 
  6.7386511230e+02, 
  3.3801528320e+03, 
  5.5477290039e+03, 
  1.9031191406e+03, 
 -1.3520118713e+02, 
}

Definition at line 383 of file e_j1f.c.

float qs5[6] [static]
Initial value:
 {

  8.1276550293e+01, 
  1.9917987061e+03, 
  1.7468484375e+04, 
  4.9851425781e+04, 
  2.7948074219e+04, 
 -4.7191835938e+03, 
}

Definition at line 358 of file e_j1f.c.

float qs8[6] [static]
Initial value:
 {

  1.6139537048e+02, 
  7.8253862305e+03, 
  1.3387534375e+05, 
  7.1965775000e+05, 
  6.6660125000e+05, 
 -2.9449025000e+05, 
}

Definition at line 333 of file e_j1f.c.

float r00 = -6.2500000000e-02 [static]

Definition at line 39 of file e_j1f.c.

float r01 = 1.4070566976e-03 [static]

Definition at line 40 of file e_j1f.c.

float r02 = -1.5995563444e-05 [static]

Definition at line 41 of file e_j1f.c.

float r03 = 4.9672799207e-08 [static]

Definition at line 42 of file e_j1f.c.

float s01 = 1.9153760746e-02 [static]

Definition at line 43 of file e_j1f.c.

float s02 = 1.8594678841e-04 [static]

Definition at line 44 of file e_j1f.c.

float s03 = 1.1771846857e-06 [static]

Definition at line 45 of file e_j1f.c.

float s04 = 5.0463624390e-09 [static]

Definition at line 46 of file e_j1f.c.

float s05 = 1.2354227016e-11 [static]

Definition at line 47 of file e_j1f.c.

float tpi = 6.3661974669e-01 [static]

Definition at line 37 of file e_j1f.c.

float U0[5] [static]
Initial value:
 {

 -1.9605709612e-01, 
  5.0443872809e-02, 
 -1.9125689287e-03, 
  2.3525259166e-05, 
 -9.1909917899e-08, 
}

Definition at line 103 of file e_j1f.c.

float V0[5] [static]
Initial value:
 {

  1.9916731864e-02, 
  2.0255257550e-04, 
  1.3560879779e-06, 
  6.2274145840e-09, 
  1.6655924903e-11, 
}

Definition at line 114 of file e_j1f.c.

float zero = 0.0 [static]

Definition at line 52 of file e_j1f.c.