cosadd.c 697 B

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