Geant4 Cross Reference |
1 /* polevl.c 1 /* polevl.c 2 * p1evl.c 2 * p1evl.c 3 * 3 * 4 * Evaluate polynomial 4 * Evaluate polynomial 5 * 5 * 6 * 6 * 7 * SYNOPSIS: 7 * SYNOPSIS: 8 * 8 * 9 * int N; 9 * int N; 10 * double x, y, coef[N+1], nf_polevl[]; 10 * double x, y, coef[N+1], nf_polevl[]; 11 * 11 * 12 * y = nf_polevl( x, coef, N ); 12 * y = nf_polevl( x, coef, N ); 13 * 13 * 14 * 14 * 15 * DESCRIPTION: 15 * DESCRIPTION: 16 * 16 * 17 * Evaluates polynomial of degree N: 17 * Evaluates polynomial of degree N: 18 * 18 * 19 * 2 N 19 * 2 N 20 * y = C + C x + C x +...+ C x 20 * y = C + C x + C x +...+ C x 21 * 0 1 2 N 21 * 0 1 2 N 22 * 22 * 23 * Coefficients are stored in reverse order: 23 * Coefficients are stored in reverse order: 24 * 24 * 25 * coef[0] = C , ..., coef[N] = C . 25 * coef[0] = C , ..., coef[N] = C . 26 * N 0 26 * N 0 27 * 27 * 28 * The function p1evl() assumes that coef[N] 28 * The function p1evl() assumes that coef[N] = 1.0 and is 29 * omitted from the array. Its calling argume 29 * omitted from the array. Its calling arguments are 30 * otherwise the same as nf_polevl(). 30 * otherwise the same as nf_polevl(). 31 * 31 * 32 */ 32 */ 33 33 34 /* 34 /* 35 Cephes Math Library Release 2.1: December, 19 35 Cephes Math Library Release 2.1: December, 1988 36 Copyright 1984, 1987, 1988 by Stephen L. Moshi 36 Copyright 1984, 1987, 1988 by Stephen L. Moshier 37 Direct inquiries to 30 Frost Street, Cambridge 37 Direct inquiries to 30 Frost Street, Cambridge, MA 02140 38 */ 38 */ 39 #include "nf_specialFunctions.h" 39 #include "nf_specialFunctions.h" 40 40 41 #if defined __cplusplus 41 #if defined __cplusplus 42 namespace GIDI { 42 namespace GIDI { 43 using namespace GIDI; 43 using namespace GIDI; 44 #endif 44 #endif 45 45 46 double nf_polevl( double x, double coef[], int 46 double nf_polevl( double x, double coef[], int N ) { 47 47 48 double ans; 48 double ans; 49 int i; 49 int i; 50 double *p; 50 double *p; 51 51 52 p = coef; 52 p = coef; 53 ans = *p++; 53 ans = *p++; 54 i = N; 54 i = N; 55 55 56 do { 56 do { 57 ans = ans * x + *p++; } 57 ans = ans * x + *p++; } 58 while( --i ); // Loop checking, 11.06.2015 58 while( --i ); // Loop checking, 11.06.2015, T. Koi 59 59 60 return( ans ); 60 return( ans ); 61 } 61 } 62 62 63 /* 63 /* 64 ********************************************** 64 ************************************************************ 65 */ 65 */ 66 /* Evaluate polynomial when coefficient of x^N 66 /* Evaluate polynomial when coefficient of x^N is 1.0. Otherwise same as polevl. */ 67 double nf_p1evl( double x, double coef[], int 67 double nf_p1evl( double x, double coef[], int N ) { 68 68 69 double ans; 69 double ans; 70 double *p; 70 double *p; 71 int i; 71 int i; 72 72 73 p = coef; 73 p = coef; 74 ans = x + *p++; 74 ans = x + *p++; 75 i = N-1; 75 i = N-1; 76 76 77 do { 77 do { 78 ans = ans * x + *p++; } 78 ans = ans * x + *p++; } 79 while( --i ); // Loop checking, 11.06.2015 79 while( --i ); // Loop checking, 11.06.2015, T. Koi 80 80 81 return( ans ); 81 return( ans ); 82 } 82 } 83 83 84 #if defined __cplusplus 84 #if defined __cplusplus 85 } 85 } 86 #endif 86 #endif 87 87