Blob
1 #include "astro.h"4 void5 icosadd(double *fp, char *cp)6 {8 cafp = fp;9 cacp = cp;10 }12 double13 cosadd(int n, ...)14 {15 double *coefp, coef[10];16 char *cp;17 int i;18 double sum, a1, a2;19 va_list arg;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);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 do38 a2 += *cp++ * *coefp++;39 while(--i);40 sum += a1 * cos(a2);41 goto loop;42 }44 double45 sinadd(int n, ...)46 {47 double *coefp, coef[10];48 char *cp;49 int i;50 double sum, a1, a2;51 va_list arg;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);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 do70 a2 += *cp++ * *coefp++;71 while(--i);72 sum += a1 * sin(a2);73 goto loop;74 }