source: sasmodels/sasmodels/models/lib/polevl.c @ 0db7dbd

core_shell_microgelsmagnetic_modelticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since 0db7dbd was 0db7dbd, checked in by pkienzle, 6 years ago

cuda support: allow cylinder model to run under CUDA as well as OpenCL

  • Property mode set to 100644
File size: 1.6 KB
RevLine 
[3936ad3]1/*                                                      polevl.c
2 *                                                      p1evl.c
3 *
4 *      Evaluate polynomial
5 *
6 *
7 *
8 * SYNOPSIS:
9 *
10 * int N;
11 * double x, y, coef[N+1], polevl[];
12 *
13 * y = polevl( x, coef, N );
14 *
15 *
16 *
17 * DESCRIPTION:
18 *
19 * Evaluates polynomial of degree N:
20 *
21 *                     2          N
22 * y  =  C  + C x + C x  +...+ C x
23 *        0    1     2          N
24 *
25 * Coefficients are stored in reverse order:
26 *
27 * coef[0] = C  , ..., coef[N] = C  .
28 *            N                   0
29 *
[447e9aa]30 * The function p1evl() assumes that C_N = 1.0 and is
[3936ad3]31 * omitted from the array.  Its calling arguments are
32 * otherwise the same as polevl().
33 *
34 *
35 * SPEED:
36 *
37 * In the interest of speed, there are no checks for out
38 * of bounds arithmetic.  This routine is used by most of
39 * the functions in the library.  Depending on available
40 * equipment features, the user may wish to rewrite the
41 * program in microcode or assembly language.
42 *
43 */
44
45
46/*
47Cephes Math Library Release 2.1:  December, 1988
48Copyright 1984, 1987, 1988 by Stephen L. Moshier
49Direct inquiries to 30 Frost Street, Cambridge, MA 02140
50*/
[e2af2a9]51
[0db7dbd]52__device__ static
53double polevl( double x, constant_par double *coef, int N )
[0278e3f]54{
[3936ad3]55
56    int i = 0;
57    double ans = coef[i];
58
59    while (i < N) {
60        i++;
61        ans = ans * x + coef[i];
62    }
[a5af4e1]63
[0278e3f]64    return ans;
[a5af4e1]65}
66
[3936ad3]67/*                                                      p1evl() */
68/*                                          N
69 * Evaluate polynomial when coefficient of x  is 1.0.
70 * Otherwise same as polevl.
71 */
72
[0db7dbd]73__device__ static
74double p1evl( double x, constant_par double *coef, int N )
[0278e3f]75{
[a5af4e1]76    int i=0;
77    double ans = x+coef[i];
78
79    while (i < N-1) {
80        i++;
81        ans = ans*x + coef[i];
82    }
83
[0278e3f]84    return ans;
[fad5dc1]85}
Note: See TracBrowser for help on using the repository browser.