Exemple #1
0
double
j0(double x)		/* wrapper j0 */
{
#ifdef _IEEE_LIBM
	return __ieee754_j0(x);
#else
	double z = __ieee754_j0(x);
	if(_LIB_VERSION == _IEEE_ || isnan(x)) return z;
	if(fabs(x)>X_TLOSS) {
	        return __kernel_standard(x,x,34); /* j0(|x|>X_TLOSS) */
	} else
	    return z;
#endif
}
Exemple #2
0
double j0(double x)
{
	double z = __ieee754_j0(x);
	if (_LIB_VERSION == _IEEE_ || isnan(x))
		return z;
	if (fabs(x) > X_TLOSS)
		return __kernel_standard(x, x, 34); /* j0(|x|>X_TLOSS) */
	return z;
}
Exemple #3
0
void
Math_j0(void *fp)
{
	F_Math_j0 *f;

	f = fp;

	*f->ret = __ieee754_j0(f->x);
}
Exemple #4
0
/* wrapper j0 */
double
j0 (double x)
{
  if (__builtin_expect (isgreater (fabs (x), X_TLOSS), 0)
      && _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
    /* j0(|x|>X_TLOSS) */
    return __kernel_standard (x, x, 34);

  return __ieee754_j0 (x);
}
Exemple #5
0
/* wrapper j0l */
long double
j0l (long double x)
{
#  if defined(__UCLIBC_HAS_FENV__)
  if (__builtin_expect (isgreater (fabsl (x), X_TLOSS), 0)
      && _LIB_VERSION != _IEEE_ && _LIB_VERSION != _POSIX_)
    /* j0(|x|>X_TLOSS) */
    return __kernel_standard_l (x, x, 234);
#  endif /* __UCLIBC_HAS_FENV__ */
  return (long double) __ieee754_j0 ((double)x);
}
Exemple #6
0
double
__ieee754_y0(double x)
{
    double z, s,c,ss,cc,u,v;
    int32_t hx,ix,lx;

    EXTRACT_WORDS(hx,lx,x);
    ix = 0x7fffffff&hx;
    /* Y0(NaN) is NaN, y0(-inf) is Nan, y0(inf) is 0  */
    if(ix>=0x7ff00000) return  one/(x+x*x);
    if((ix|lx)==0) return -one/zero;
    if(hx<0) return zero/zero;
    if(ix >= 0x40000000) {  /* |x| >= 2.0 */
        /* y0(x) = sqrt(2/(pi*x))*(p0(x)*sin(x0)+q0(x)*cos(x0))
         * where x0 = x-pi/4
         *      Better formula:
         *              cos(x0) = cos(x)cos(pi/4)+sin(x)sin(pi/4)
         *                      =  1/sqrt(2) * (sin(x) + cos(x))
         *              sin(x0) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4)
         *                      =  1/sqrt(2) * (sin(x) - cos(x))
         * To avoid cancellation, use
         *              sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x))
         * to compute the worse one.
         */
        s = sin(x);
        c = cos(x);
        ss = s-c;
        cc = s+c;
        /*
         * j0(x) = 1/sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / sqrt(x)
         * y0(x) = 1/sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / sqrt(x)
         */
        if(ix<0x7fe00000) {  /* make sure x+x not overflow */
            z = -cos(x+x);
            if ((s*c)<zero) cc = z/ss;
            else            ss = z/cc;
        }
        if(ix>0x48000000) z = (invsqrtpi*ss)/sqrt(x);
        else {
            u = pzero(x);
            v = qzero(x);
            z = invsqrtpi*(u*ss+v*cc)/sqrt(x);
        }
        return z;
    }
    if(ix<=0x3e400000) {	/* x < 2**-27 */
        return(u00 + tpi*__ieee754_log(x));
    }
    z = x*x;
    u = u00+z*(u01+z*(u02+z*(u03+z*(u04+z*(u05+z*u06)))));
    v = one+z*(v01+z*(v02+z*(v03+z*v04)));
    return(u/v + tpi*(__ieee754_j0(x)*__ieee754_log(x)));
}