tcosadd.c - plan9port - [fork] Plan 9 from user space | |
git clone git://src.adamsgaard.dk/plan9port | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
tcosadd.c (889B) | |
--- | |
1 #include "astro.h" | |
2 | |
3 | |
4 void | |
5 icosadd(double *fp, char *cp) | |
6 { | |
7 | |
8 cafp = fp; | |
9 cacp = cp; | |
10 } | |
11 | |
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; | |
20 | |
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); | |
27 | |
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 } | |
43 | |
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; | |
52 | |
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); | |
59 | |
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 } |