bessely.cpp 929 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. //-----------------------------------------------------------------------------
  2. //
  3. // Bessel Y function
  4. //
  5. // Input: tos-2 x (can be a symbol or expr)
  6. //
  7. // tos-1 n
  8. //
  9. // Output: Result on stack
  10. //
  11. //-----------------------------------------------------------------------------
  12. #include "stdafx.h"
  13. #include "defs.h"
  14. void
  15. eval_bessely(void)
  16. {
  17. push(cadr(p1));
  18. eval();
  19. push(caddr(p1));
  20. eval();
  21. bessely();
  22. }
  23. void
  24. bessely(void)
  25. {
  26. save();
  27. yybessely();
  28. restore();
  29. }
  30. #define X p1
  31. #define N p2
  32. void
  33. yybessely(void)
  34. {
  35. double d;
  36. int n;
  37. N = pop();
  38. X = pop();
  39. push(N);
  40. n = pop_integer();
  41. if (isdouble(X) && n != (int) 0x80000000) {
  42. d = yn(n, X->u.d);
  43. push_double(d);
  44. return;
  45. }
  46. if (isnegativeterm(N)) {
  47. push_integer(-1);
  48. push(N);
  49. power();
  50. push_symbol(BESSELY);
  51. push(X);
  52. push(N);
  53. negate();
  54. list(3);
  55. multiply();
  56. return;
  57. }
  58. push_symbol(BESSELY);
  59. push(X);
  60. push(N);
  61. list(3);
  62. return;
  63. }