Пример #1
0
/*************************************************************
 *************************************************************
 *               ROUNDED  TO NEAREST			     *
 *************************************************************
 *************************************************************/
double scs_cos_rn(double x){ 
  scs_t sc1, sc2;
  double resd;
  int N;
#if EVAL_PERF
	crlibm_second_step_taken++;
#endif

  scs_set_d(sc1, x);
  N = rem_pio2_scs(sc2, sc1);
  N = N & 0x0000003;		/* extract the 2 last bits of  N */
  switch (N){
  case 0:
    cosine(sc2);
    scs_get_d(&resd, sc2);
    return resd;
  case 1:
    sine(sc2);
    scs_get_d(&resd, sc2);
    return -resd;
  case 2:
    cosine(sc2);
    scs_get_d(&resd, sc2);
    return -resd;
  case 3:
    sine(sc2);
    scs_get_d(&resd, sc2);
    return resd;
  default:
    fprintf(stderr,"ERREUR: %d is not a valid value in s_cos \n", N);
    return 0.0;
  }
  
}
static void scs_tan(double x, scs_ptr res_scs){
  scs_t x_scs;
  scs_t x2;
  int i;
   scs_t y_scs;
  int N;

  scs_set_d(x_scs, x);


  N = rem_pio2_scs(y_scs, x_scs); 	/* x (=sc2) is in [-Pi/4,Pi/4] */
  N = N & 1;		/* extract the last bit of  N */
  scs_square(x2, y_scs);

  scs_mul(res_scs, tan_scs_poly_ptr[0], x2);

  for(i=1; i<(DEGREE_TAN_SCS-1)/2; i++){ /* The last coeff is not read from the file. */
    scs_add(res_scs, tan_scs_poly_ptr[i], res_scs);
    scs_mul(res_scs, res_scs, x2);
  }

  scs_mul(res_scs, res_scs, y_scs);
  scs_add(res_scs, y_scs, res_scs);

  if(N==1) {
    scs_inv(res_scs, res_scs);
    res_scs->sign = -res_scs->sign;
  }
}