gsl_specfunc__cheb_eval.c 656 B

1234567891011121314151617181920212223242526272829303132333435
  1. static inline int
  2. cheb_eval_e(const cheb_series * cs,
  3. const double x,
  4. gsl_sf_result * result)
  5. {
  6. int j;
  7. double d = 0.0;
  8. double dd = 0.0;
  9. double y = (2.0*x - cs->a - cs->b) / (cs->b - cs->a);
  10. double y2 = 2.0 * y;
  11. double e = 0.0;
  12. for(j = cs->order; j>=1; j--) {
  13. double temp = d;
  14. d = y2*d - dd + cs->c[j];
  15. e += fabs(y2*temp) + fabs(dd) + fabs(cs->c[j]);
  16. dd = temp;
  17. }
  18. {
  19. double temp = d;
  20. d = y*d - dd + 0.5 * cs->c[0];
  21. e += fabs(y*temp) + fabs(dd) + 0.5 * fabs(cs->c[0]);
  22. }
  23. result->val = d;
  24. result->err = GSL_DBL_EPSILON * e + fabs(cs->c[cs->order]);
  25. return GSL_SUCCESS;
  26. }