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