leading.cpp 655 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /* Return the leading coefficient of a polynomial.
  2. Example
  3. leading(5x^2+x+1,x)
  4. Result
  5. 5
  6. The result is undefined if P is not a polynomial. */
  7. #include "stdafx.h"
  8. #include "defs.h"
  9. void
  10. eval_leading(void)
  11. {
  12. push(cadr(p1));
  13. eval();
  14. push(caddr(p1));
  15. eval();
  16. p1 = pop();
  17. if (p1 == symbol(NIL))
  18. guess();
  19. else
  20. push(p1);
  21. leading();
  22. }
  23. #define P p1
  24. #define X p2
  25. #define N p3
  26. void
  27. leading(void)
  28. {
  29. save();
  30. X = pop();
  31. P = pop();
  32. push(P); // N = degree of P
  33. push(X);
  34. degree();
  35. N = pop();
  36. push(P); // divide through by X ^ N
  37. push(X);
  38. push(N);
  39. power();
  40. divide();
  41. push(X); // remove terms that depend on X
  42. filter();
  43. restore();
  44. }