xref: /plan9/sys/src/cmd/astro/cosadd.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
13e12c5d1SDavid du Colombier #include "astro.h"
23e12c5d1SDavid du Colombier 
33e12c5d1SDavid du Colombier 
43e12c5d1SDavid du Colombier void
icosadd(double * fp,char * cp)5*7dd7cddfSDavid du Colombier icosadd(double *fp, char *cp)
63e12c5d1SDavid du Colombier {
73e12c5d1SDavid du Colombier 
83e12c5d1SDavid du Colombier 	cafp = fp;
93e12c5d1SDavid du Colombier 	cacp = cp;
103e12c5d1SDavid du Colombier }
113e12c5d1SDavid du Colombier 
123e12c5d1SDavid du Colombier double
cosadd(int n,double coef,...)133e12c5d1SDavid du Colombier cosadd(int n, double coef, ...)
143e12c5d1SDavid du Colombier {
153e12c5d1SDavid du Colombier 	double *coefp;
163e12c5d1SDavid du Colombier 	char *cp;
173e12c5d1SDavid du Colombier 	int i;
183e12c5d1SDavid du Colombier 	double sum, a1, a2;
193e12c5d1SDavid du Colombier 
203e12c5d1SDavid du Colombier 	sum = 0;
213e12c5d1SDavid du Colombier 	cp = cacp;
223e12c5d1SDavid du Colombier 
233e12c5d1SDavid du Colombier loop:
243e12c5d1SDavid du Colombier 	a1 = *cafp++;
253e12c5d1SDavid du Colombier 	if(a1 == 0) {
263e12c5d1SDavid du Colombier 		cacp = cp;
273e12c5d1SDavid du Colombier 		return sum;
283e12c5d1SDavid du Colombier 	}
293e12c5d1SDavid du Colombier 	a2 = *cafp++;
303e12c5d1SDavid du Colombier 	i = n;
313e12c5d1SDavid du Colombier 	coefp = &coef;
323e12c5d1SDavid du Colombier 	do
333e12c5d1SDavid du Colombier 		a2 += *cp++ * *coefp++;
343e12c5d1SDavid du Colombier 	while(--i);
353e12c5d1SDavid du Colombier 	sum += a1 * cos(a2);
363e12c5d1SDavid du Colombier 	goto loop;
373e12c5d1SDavid du Colombier }
383e12c5d1SDavid du Colombier 
393e12c5d1SDavid du Colombier double
sinadd(int n,double coef,...)403e12c5d1SDavid du Colombier sinadd(int n, double coef, ...)
413e12c5d1SDavid du Colombier {
423e12c5d1SDavid du Colombier 	double *coefp;
433e12c5d1SDavid du Colombier 	char *cp;
443e12c5d1SDavid du Colombier 	int i;
453e12c5d1SDavid du Colombier 	double sum, a1, a2;
463e12c5d1SDavid du Colombier 
473e12c5d1SDavid du Colombier 	sum = 0;
483e12c5d1SDavid du Colombier 	cp = cacp;
493e12c5d1SDavid du Colombier 
503e12c5d1SDavid du Colombier loop:
513e12c5d1SDavid du Colombier 	a1 = *cafp++;
523e12c5d1SDavid du Colombier 	if(a1 == 0) {
533e12c5d1SDavid du Colombier 		cacp = cp;
543e12c5d1SDavid du Colombier 		return sum;
553e12c5d1SDavid du Colombier 	}
563e12c5d1SDavid du Colombier 	a2 = *cafp++;
573e12c5d1SDavid du Colombier 	i = n;
583e12c5d1SDavid du Colombier 	coefp = &coef;
593e12c5d1SDavid du Colombier 	do
603e12c5d1SDavid du Colombier 		a2 += *cp++ * *coefp++;
613e12c5d1SDavid du Colombier 	while(--i);
623e12c5d1SDavid du Colombier 	sum += a1 * sin(a2);
633e12c5d1SDavid du Colombier 	goto loop;
643e12c5d1SDavid du Colombier }
65