Added script front-end for primer-design code
[htsworkflow.git] / htswanalysis / MACS / lib / gsl / gsl-1.11 / poly / eval.c
1 /* poly/eval.c
2  * 
3  * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman
4  * Complex functions Copyright (C) 2007 Frank Reininghaus
5  * 
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.
10  * 
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.
15  * 
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.
19  */
20
21 #include <config.h>
22 #include <gsl/gsl_poly.h>
23
24 /*-*-*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*-*/
25
26 /* checked OK [GJ] Tue May  5 12:19:56 MDT 1998 */
27
28 #ifndef HIDE_INLINE_STATIC
29 double 
30 gsl_poly_eval(const double c[], const int len, const double x)
31 {
32   int i;
33   double ans = c[len-1];
34   for(i=len-1; i>0; i--) ans = c[i-1] + x * ans;
35   return ans;
36 }
37
38 gsl_complex
39 gsl_poly_complex_eval(const double c[], const int len, const gsl_complex z)
40 {
41   int i;
42   gsl_complex ans;
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]); 
47        but faster */
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);
51   } 
52   return ans;
53 }
54
55 gsl_complex
56 gsl_complex_poly_complex_eval(const gsl_complex c[], const int len, const gsl_complex z)
57 {
58   int i;
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));
63        but faster */
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);
67   }
68   return ans;
69 }
70 #endif