Blob


1 #include "astro.h"
4 void
5 icosadd(double *fp, char *cp)
6 {
8 cafp = fp;
9 cacp = cp;
10 }
12 double
13 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 do
38 a2 += *cp++ * *coefp++;
39 while(--i);
40 sum += a1 * cos(a2);
41 goto loop;
42 }
44 double
45 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 do
70 a2 += *cp++ * *coefp++;
71 while(--i);
72 sum += a1 * sin(a2);
73 goto loop;
74 }