123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #include "slatec-internal.hpp"
- static integer const c__4 = 4;
- static integer const c__2 = 2;
- static integer const c__3 = 3;
- static integer const c__1 = 1;
- static double const onepl = 1. + d1mach_(4);
- double dcsevl_(double *x, double const *cs, integer const *n)
- {
-
- integer i__1;
- double ret_val;
-
- integer i__;
- double b0, b1, b2 = 0.;
- integer ni;
- double twox;
-
- --cs;
-
- if (*n < 1) {
- xermsg_("SLATEC", "DCSEVL", "NUMBER OF TERMS .LE. 0", &c__2, &c__2,
- (ftnlen)6, (ftnlen)6, (ftnlen)22);
- }
- if (*n > 1000) {
- xermsg_("SLATEC", "DCSEVL", "NUMBER OF TERMS .GT. 1000", &c__3, &c__2,
- (ftnlen)6, (ftnlen)6, (ftnlen)25);
- }
- if (abs(*x) > onepl) {
- xermsg_("SLATEC", "DCSEVL", "X OUTSIDE THE INTERVAL (-1,+1)", &c__1, &c__1,
- (ftnlen)6, (ftnlen)6, (ftnlen)30);
- }
- b1 = 0.;
- b0 = 0.;
- twox = *x * 2.;
- i__1 = *n;
- for (i__ = 1; i__ <= i__1; ++i__) {
- b2 = b1;
- b1 = b0;
- ni = *n + 1 - i__;
- b0 = twox * b1 - b2 + cs[ni];
- }
- ret_val = (b0 - b2) * .5;
- return ret_val;
- }
|