Exemple #1
0
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);
    }
}
Exemple #2
0
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);
    }
}
Exemple #3
0
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);
  }
}
Exemple #4
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);
  }
}
Exemple #5
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);
    }
}
Exemple #6
0
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);
    }
}
Exemple #7
0
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);
 }
}