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