cosh.cpp 543 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // exp(x) + exp(-x)
  2. // cosh(x) = ----------------
  3. // 2
  4. #include "stdafx.h"
  5. #include "defs.h"
  6. void
  7. eval_cosh(void)
  8. {
  9. push(cadr(p1));
  10. eval();
  11. ycosh();
  12. }
  13. void
  14. ycosh(void)
  15. {
  16. save();
  17. yycosh();
  18. restore();
  19. }
  20. void
  21. yycosh(void)
  22. {
  23. double d;
  24. p1 = pop();
  25. if (car(p1) == symbol(ARCCOSH)) {
  26. push(cadr(p1));
  27. return;
  28. }
  29. if (isdouble(p1)) {
  30. d = cosh(p1->u.d);
  31. if (fabs(d) < 1e-10)
  32. d = 0.0;
  33. push_double(d);
  34. return;
  35. }
  36. if (iszero(p1)) {
  37. push(one);
  38. return;
  39. }
  40. push_symbol(COSH);
  41. push(p1);
  42. list(2);
  43. }