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); }
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; }
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))); } }