Beispiel #1
0
static JSBool
math_abs(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
    jsdouble x, z;

    if (!js_ValueToNumber(cx, argv[0], &x))
        return JS_FALSE;
    z = fd_fabs(x);
    return js_NewNumberValue(cx, z, rval);
}
Beispiel #2
0
double fd_remainder(double x, double p)	/* wrapper fd_remainder */
{
	int hx,hp;
	unsigned sx,lx,lp;
	double p_half;

	hx = FD_HI(x);		/* high word of x */
	lx = FD_LO(x);		/* low  word of x */
	hp = FD_HI(p);		/* high word of p */
	lp = FD_LO(p);		/* low  word of p */
	sx = hx&0x80000000;
	hp &= 0x7fffffff;
	hx &= 0x7fffffff;

    /* purge off fd_exception values */
	if((hp|lp)==0) return gD(gM(x,p),gM(x,p)); 	/* p = 0 */
	if((hx>=0x7ff00000)||			/* x not fd_finite */
	  ((hp>=0x7ff00000)&&			/* p is NaN */
	  (((hp-0x7ff00000)|lp)!=0)))
	    return gD(gM(x,p),gM(x,p));


	if (hp<=0x7fdfffff) x = fd_fmod(x,gA(p,p));	/* now x < 2p */
	if (((hx-hp)|(lx-lp))==0) return gM(zero,x);
	x  = fd_fabs(x);
	p  = fd_fabs(p);
	if (hp<0x00200000) {
	    if(gA(x,x) > p) {
		x = gS(x,p);
		if(gA(x,x) >= p) x = gS(x,p);
	    }
	} else {
	    p_half = gM(0.5,p);
	    if(x>p_half) {
		x = gS(x,p);
		if(x>=p_half) x = gS(x,p);
	    }
	}
	FD_HI(x) ^= sx;
	return x;
}
Beispiel #3
0
double fd_j0(double x)		/* wrapper fd_j0 */
{
	double z, s,c,ss,cc,r,u,v;
	int hx,ix;

	hx = FD_HI(x);
	ix = hx&0x7fffffff;
	if(ix>=0x7ff00000) return gD(one, gM(x,x));
	x = fd_fabs(x);
	if(ix >= 0x40000000) {	/* |x| >= 2.0 */
		s = fd_sin(x);
		c = fd_cos(x);
		ss = gS(s,c);
		cc = gA(s,c);
		if(ix<0x7fe00000) {  /* make sure x+x not overflow */
		    z = -fd_cos(gA(x,x));
		    if (gM(s,c) < zero) cc = gD(z,ss);
		    else 	    ss = gD(z,cc);
		}
	/*
	 * fd_j0(x) = 1/fd_sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / fd_sqrt(x)
	 * fd_y0(x) = 1/fd_sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / fd_sqrt(x)
	 */
		if(ix>0x48000000) z = gD(gM(invsqrtpi,cc),gSqrt(x));
		else {
		    u = pzero(x); v = qzero(x);
		    z = gD(gM(invsqrtpi, (gS(gM(u,cc), gM(v,ss)))), gSqrt(x));
		}
		return z;
	}
	if(ix<0x3f200000) {	/* |x| < 2**-13 */
	    if(huge+x>one) {	/* raise inexact if x != 0 */
	        if(ix<0x3e400000) return one;	/* |x|<2**-27 */
	        else 	      return gS(one, gM(gM(0.25,x),x));
	    }
	}
	z = gM(x,x);
	r = gM(z,gA(R02, gM(z,gA(R03, gM(z,gA(R04, gM(z,R05)))))));
	s = gA(one, gM(z,gA(S01, gM(z,gA(S02, gM(z,gA(S03, gM(z,S04))))))));
	if(ix < 0x3FF00000) {	/* |x| < 1.00 */
	    return gA(one, gM(z,gA(-0.25,gD(r,s))));
	} else {
	    u = gM(0.5,x);
	    return(gM(gA(one, u), gS(one, u)) + gM(z, gD(r,s)));
	}
}