static double SECTION bsloww2 (double x, double dx, double orig, int n) { mynumber u; double w[2], y, cor, res; y = fabs (x); u.x = big + y; y = y - (u.x - big); dx = (x > 0) ? dx : -dx; res = do_cos_slow (u, y, dx, 1.1e-24, &cor); if (res == res + cor) return (n & 2) ? -res : res; else { __docos (fabs (x), dx, w); if (w[1] > 0) cor = 1.000000005 * w[1] + 1.1e-24; else cor = 1.000000005 * w[1] - 1.1e-24; if (w[0] == w[0] + cor) return (n & 2) ? -w[0] : w[0]; else return (n & 1) ? __mpsin (orig, 0, true) : __mpcos (orig, 0, true); } }
static double SECTION sloww2 (double x, double dx, double orig, int n) { mynumber u; double w[2], y, cor, res; u.x = big + x; y = x - (u.x - big); res = do_cos_slow (u, y, dx, 3.1e-30 * fabs (orig), &cor); if (res == res + cor) return (n & 2) ? -res : res; else { __docos (x, dx, w); if (w[1] > 0) cor = 1.000000005 * w[1] + 1.1e-30 * fabs (orig); else cor = 1.000000005 * w[1] - 1.1e-30 * fabs (orig); if (w[0] == w[0] + cor) return (n & 2) ? -w[0] : w[0]; else return __mpsin (orig, 0, true); } }
static double cslow2(double x) { mynumber u; double sn,ssn,cs,ccs,s,c,w[2],y,y1,y2,e1,e2,xx,cor,res; static const double t22 = 6291456.0; int4 k; y=ABS(x); u.x = big.x+y; y = y-(u.x-big.x); xx=y*y; s = y*xx*(sn3 +xx*sn5); c = xx*(cs2 +xx*(cs4 + xx*cs6)); k=u.i[LOW_HALF]<<2; sn=sincos.x[k]; ssn=sincos.x[k+1]; cs=sincos.x[k+2]; ccs=sincos.x[k+3]; y1 = (y+t22)-t22; y2 = y - y1; e1 = (sn+t22)-t22; e2=(sn-e1)+ssn; cor=(ccs-cs*c-e1*y2-e2*y)-sn*s; y=cs-e1*y1; cor = cor+((cs-y)-e1*y1); res=y+cor; cor=(y-res)+cor; if (res == res+1.0005*cor) return res; else { y=ABS(x); __docos(y,0,w); if (w[0] == w[0]+1.000000005*w[1]) return w[0]; else return __mpcos(x,0); } }
static double slow2(double x) { mynumber u; double sn,ssn,cs,ccs,s,c,w[2],y,y1,y2,e1,e2,xx,cor,res,del; static const double t22 = 6291456.0; int4 k; y=ABS(x); y = hp0.x-y; if (y>=0) { u.x = big.x+y; y = y-(u.x-big.x); del = hp1.x; } else { u.x = big.x-y; y = -(y+(u.x-big.x)); del = -hp1.x; } xx=y*y; s = y*xx*(sn3 +xx*sn5); c = y*del+xx*(cs2 +xx*(cs4 + xx*cs6)); k=u.i[LOW_HALF]<<2; sn=sincos.x[k]; ssn=sincos.x[k+1]; cs=sincos.x[k+2]; ccs=sincos.x[k+3]; y1 = (y+t22)-t22; y2 = (y - y1)+del; e1 = (sn+t22)-t22; e2=(sn-e1)+ssn; cor=(ccs-cs*c-e1*y2-e2*y)-sn*s; y=cs-e1*y1; cor = cor+((cs-y)-e1*y1); res=y+cor; cor=(y-res)+cor; if (res == res+1.0005*cor) return (x>0)?res:-res; else { y=ABS(x)-hp0.x; y1=y-hp1.x; y2=(y-y1)-hp1.x; __docos(y1,y2,w); if (w[0] == w[0]+1.000000005*w[1]) return (x>0)?w[0]:-w[0]; else return (x>0)?__mpsin(x,0):-__mpsin(-x,0); } }
static double SECTION cslow2 (double x) { mynumber u; double w[2], y, cor, res; y = fabs (x); u.x = big + y; y = y - (u.x - big); res = do_cos_slow (u, y, 0, 0, &cor); if (res == res + cor) return res; else { y = fabs (x); __docos (y, 0, w); if (w[0] == w[0] + 1.000000005 * w[1]) return w[0]; else return __mpcos (x, 0, false); } }
static double SECTION slow2 (double x) { mynumber u; double w[2], y, y1, y2, cor, res, del; y = fabs (x); y = hp0 - y; if (y >= 0) { u.x = big + y; y = y - (u.x - big); del = hp1; } else { u.x = big - y; y = -(y + (u.x - big)); del = -hp1; } res = do_cos_slow (u, y, del, 0, &cor); if (res == res + cor) return (x > 0) ? res : -res; else { y = fabs (x) - hp0; y1 = y - hp1; y2 = (y - y1) - hp1; __docos (y1, y2, w); if (w[0] == w[0] + 1.000000005 * w[1]) return (x > 0) ? w[0] : -w[0]; else return (x > 0) ? __mpsin (x, 0, false) : -__mpsin (-x, 0, false); } }
static double bsloww2(double x, double dx, double orig, int n) { mynumber u; double sn,ssn,cs,ccs,s,c,w[2],y,y1,y2,e1,e2,xx,cor,res; static const double t22 = 6291456.0; int4 k; y=ABS(x); u.x=big.x+y; y=y-(u.x-big.x); dx=(x>0)?dx:-dx; xx=y*y; s = y*xx*(sn3 +xx*sn5); c = y*dx+xx*(cs2 +xx*(cs4 + xx*cs6)); k=u.i[LOW_HALF]<<2; sn=sincos.x[k]; ssn=sincos.x[k+1]; cs=sincos.x[k+2]; ccs=sincos.x[k+3]; y1 = (y+t22)-t22; y2 = (y - y1)+dx; e1 = (sn+t22)-t22; e2=(sn-e1)+ssn; cor=(ccs-cs*c-e1*y2-e2*y)-sn*s; y=cs-e1*y1; cor = cor+((cs-y)-e1*y1); res=y+cor; cor=(y-res)+cor; cor = (cor>0)? 1.0005*cor+1.1e-24 : 1.0005*cor-1.1e-24; if (res == res + cor) return (n&2)?-res:res; else { __docos(ABS(x),dx,w); cor = (w[1]>0)? 1.000000005*w[1]+1.1e-24 : 1.000000005*w[1]-1.1e-24; if (w[0] == w[0]+cor) return (n&2)?-w[0]:w[0]; else return (n&1)?__mpsin1(orig):__mpcos1(orig); } }