extern const double T[362];   // T[k] is an approx of sin(k/2) such that 
                              // for all k | T[k]-sin(k/2) | < 1O^{-4}

double SIN_0_180(double x) {
 double dx, i_dx, v_inf;
 double v_sup; int i;
 dx=2*x; i=dx; i_dx=i; 
 v_inf=T[i]; v_sup=T[i+1];
 return v_inf + (dx - i_dx) * (v_sup - v_inf); }

double SIN_180(double x) {
 if (x<0) 
  return -SIN_0_180(-x);
 else     
  return SIN_0_180(x); }

double SIN_POS(double x) {
 if (x>180) return SIN_180(x-360.*(int)((x+180.)/360.));
 else       return SIN_180(x); }

double SIN(double x) {
 if (x<0) return -SIN_POS(-x);
 else     return SIN_POS(x); }
