xref: /plan9-contrib/sys/src/cmd/astro/cosadd.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1 #include "astro.h"
2 
3 
4 void
icosadd(double * fp,char * cp)5 icosadd(double *fp, char *cp)
6 {
7 
8 	cafp = fp;
9 	cacp = cp;
10 }
11 
12 double
cosadd(int n,double coef,...)13 cosadd(int n, double coef, ...)
14 {
15 	double *coefp;
16 	char *cp;
17 	int i;
18 	double sum, a1, a2;
19 
20 	sum = 0;
21 	cp = cacp;
22 
23 loop:
24 	a1 = *cafp++;
25 	if(a1 == 0) {
26 		cacp = cp;
27 		return sum;
28 	}
29 	a2 = *cafp++;
30 	i = n;
31 	coefp = &coef;
32 	do
33 		a2 += *cp++ * *coefp++;
34 	while(--i);
35 	sum += a1 * cos(a2);
36 	goto loop;
37 }
38 
39 double
sinadd(int n,double coef,...)40 sinadd(int n, double coef, ...)
41 {
42 	double *coefp;
43 	char *cp;
44 	int i;
45 	double sum, a1, a2;
46 
47 	sum = 0;
48 	cp = cacp;
49 
50 loop:
51 	a1 = *cafp++;
52 	if(a1 == 0) {
53 		cacp = cp;
54 		return sum;
55 	}
56 	a2 = *cafp++;
57 	i = n;
58 	coefp = &coef;
59 	do
60 		a2 += *cp++ * *coefp++;
61 	while(--i);
62 	sum += a1 * sin(a2);
63 	goto loop;
64 }
65