#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; | |
} |