65 lines
697 B
C
65 lines
697 B
C
#include "astro.h"
|
|
|
|
|
|
void
|
|
icosadd(double *fp, char *cp)
|
|
{
|
|
|
|
cafp = fp;
|
|
cacp = cp;
|
|
}
|
|
|
|
double
|
|
cosadd(int n, double coef, ...)
|
|
{
|
|
double *coefp;
|
|
char *cp;
|
|
int i;
|
|
double sum, a1, a2;
|
|
|
|
sum = 0;
|
|
cp = cacp;
|
|
|
|
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 coef, ...)
|
|
{
|
|
double *coefp;
|
|
char *cp;
|
|
int i;
|
|
double sum, a1, a2;
|
|
|
|
sum = 0;
|
|
cp = cacp;
|
|
|
|
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;
|
|
}
|