#include "astro.h" void icosadd(double *fp, char *cp) { cafp = fp; cacp = cp; } double cosadd(int n, ...) { double *coefp, coef[10]; char *cp; int i; double sum, a1, a2; va_list arg; sum = 0; cp = cacp; va_start(arg, n); for(i=0; i<n; i++) coef[i] = va_arg(arg, double); va_end(arg); loop: a1 = *cafp++; if(a1 == 0) { cacp = cp; return sum; } a2 = *cafp++; i = n; coefp = coef; do a2 += *cp++ * *coefp++; while(--i); sum += a1 * cos(a2); goto loop; } double sinadd(int n, ...) { double *coefp, coef[10]; char *cp; int i; double sum, a1, a2; va_list arg; sum = 0; cp = cacp; va_start(arg, n); for(i=0; i<n; i++) coef[i] = va_arg(arg, double); va_end(arg); loop: a1 = *cafp++; if(a1 == 0) { cacp = cp; return sum; } a2 = *cafp++; i = n; coefp = coef; do a2 += *cp++ * *coefp++; while(--i); sum += a1 * sin(a2); goto loop; }