cosadd.c (889B)
1 #include "astro.h" 2 3 4 void 5 icosadd(double *fp, char *cp) 6 { 7 8 cafp = fp; 9 cacp = cp; 10 } 11 12 double 13 cosadd(int n, ...) 14 { 15 double *coefp, coef[10]; 16 char *cp; 17 int i; 18 double sum, a1, a2; 19 va_list arg; 20 21 sum = 0; 22 cp = cacp; 23 va_start(arg, n); 24 for(i=0; i<n; i++) 25 coef[i] = va_arg(arg, double); 26 va_end(arg); 27 28 loop: 29 a1 = *cafp++; 30 if(a1 == 0) { 31 cacp = cp; 32 return sum; 33 } 34 a2 = *cafp++; 35 i = n; 36 coefp = coef; 37 do 38 a2 += *cp++ * *coefp++; 39 while(--i); 40 sum += a1 * cos(a2); 41 goto loop; 42 } 43 44 double 45 sinadd(int n, ...) 46 { 47 double *coefp, coef[10]; 48 char *cp; 49 int i; 50 double sum, a1, a2; 51 va_list arg; 52 53 sum = 0; 54 cp = cacp; 55 va_start(arg, n); 56 for(i=0; i<n; i++) 57 coef[i] = va_arg(arg, double); 58 va_end(arg); 59 60 loop: 61 a1 = *cafp++; 62 if(a1 == 0) { 63 cacp = cp; 64 return sum; 65 } 66 a2 = *cafp++; 67 i = n; 68 coefp = coef; 69 do 70 a2 += *cp++ * *coefp++; 71 while(--i); 72 sum += a1 * sin(a2); 73 goto loop; 74 }