arcsinh.cpp 466 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include "stdafx.h"
  2. #include "defs.h"
  3. void
  4. eval_arcsinh(void)
  5. {
  6. push(cadr(p1));
  7. eval();
  8. arcsinh();
  9. }
  10. void
  11. arcsinh(void)
  12. {
  13. double d;
  14. save();
  15. p1 = pop();
  16. if (car(p1) == symbol(SINH)) {
  17. push(cadr(p1));
  18. restore();
  19. return;
  20. }
  21. if (isdouble(p1)) {
  22. d = p1->u.d;
  23. d = log(d + sqrt(d * d + 1.0));
  24. push_double(d);
  25. restore();
  26. return;
  27. }
  28. if (iszero(p1)) {
  29. push(zero);
  30. restore();
  31. return;
  32. }
  33. push_symbol(ARCSINH);
  34. push(p1);
  35. list(2);
  36. restore();
  37. }