3 * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman
4 * Complex functions Copyright (C) 2007 Frank Reininghaus
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or (at
9 * your option) any later version.
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22 #include <gsl/gsl_poly.h>
24 /*-*-*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*-*/
26 /* checked OK [GJ] Tue May 5 12:19:56 MDT 1998 */
28 #ifndef HIDE_INLINE_STATIC
30 gsl_poly_eval(const double c[], const int len, const double x)
33 double ans = c[len-1];
34 for(i=len-1; i>0; i--) ans = c[i-1] + x * ans;
39 gsl_poly_complex_eval(const double c[], const int len, const gsl_complex z)
43 GSL_SET_COMPLEX (&ans, c[len-1], 0.0);
44 for(i=len-1; i>0; i--) {
45 /* The following three lines are equivalent to
46 ans = gsl_complex_add_real (gsl_complex_mul (z, ans), c[i-1]);
48 double tmp = c[i-1] + GSL_REAL (z) * GSL_REAL (ans) - GSL_IMAG (z) * GSL_IMAG (ans);
49 GSL_SET_IMAG (&ans, GSL_IMAG (z) * GSL_REAL (ans) + GSL_REAL (z) * GSL_IMAG (ans));
50 GSL_SET_REAL (&ans, tmp);
56 gsl_complex_poly_complex_eval(const gsl_complex c[], const int len, const gsl_complex z)
59 gsl_complex ans = c[len-1];
60 for(i=len-1; i>0; i--) {
61 /* The following three lines are equivalent to
62 ans = gsl_complex_add (c[i-1], gsl_complex_mul (z, ans));
64 double tmp = GSL_REAL (c[i-1]) + GSL_REAL (z) * GSL_REAL (ans) - GSL_IMAG (z) * GSL_IMAG (ans);
65 GSL_SET_IMAG (&ans, GSL_IMAG (c[i-1]) + GSL_IMAG (z) * GSL_REAL (ans) + GSL_REAL (z) * GSL_IMAG (ans));
66 GSL_SET_REAL (&ans, tmp);